項目中遇到的一個問題站欺,分享出來,希望大家可以不踩這個坑
前話纤垂,公司是用Mac開發(fā)矾策,在家里有時候會用Win加加班,公司的項目有幾個使用了Databinding峭沦,在Mac上運行都是沒有問題的贾虽,我推到Git上,回家拉下來吼鱼,其中的一個報錯了蓬豁,另外的都沒有問題!
分析問題
- 公司項目本身沒有錯,在家里報錯几苍,問題應(yīng)該不在代碼層面上
- 之前處理過一次utf8的問題翻屈,win下gradle 添加這么一行東西
tasks.withType(JavaCompile) {
options.encoding = "UTF-8"
}
那么這一次極有可能仍然是編碼的問題,其中報錯有兩行比較重要的摘錄出來
android.databinding.annotationprocessor.ProcessExpressions@65ff4c24 javax.xml.bind.UnmarshalException with linked exception:
Caused by: org.apache.xerces.impl.io.MalformedByteSequenceException: Invalid byte 3 of 3-byte UTF-8 sequence.
我們遇到的坑大概率是別人踩過的坑妻坝,Google或者其他的搜索引擎伸眶,據(jù)說是IDE的一部分,于是找到了這個博客,確定了自己的猜測刽宪。
http://blog.csdn.net/lablenet/article/details/52305529
題外話&問題原因&個人習(xí)慣
Databinding最好的使用厘贼,通常是后臺返回直接展示的數(shù)據(jù),而實際上后臺返回的數(shù)據(jù)有時候需要我們在處理一下圣拄,我的同事的方法是跟鏈接博客中一樣嘴秸,喜歡在xml里面做操作,(比如android:text='@{monthBean.onlineCount+"單"}')我自己則是喜歡在bean對象里面做處理庇谆,通過前綴為getStringXXX的方式來獲取岳掐,而導(dǎo)致這個問題原因正是因為在xml里面做拼接的字符不能被正確的解析,
那么問題來了饭耳,另外其他的項目串述,同事也有在外面做處理,為什么沒有報錯寞肖,猜測是特定的字符不能被解析造成的纲酗。
剩下的就是力氣活,由于有段時間沒有拉這個代碼逝淹,積累的較多耕姊,我不能確定是什么時候造成的,只能猜測著用Git不斷的切換,定位到產(chǎn)生的原因.
不管怎樣終于找到了,奇怪的是有的拼接沒有問題有的拼接有問題,這其實是另外兩個同事寫的,看來同樣是mac還是有些差別,anyway總算解決了可以繼續(xù)寫應(yīng)該寫的了.
android:text='@{monthBean.onlineCount+"單"}' 報錯
android:text='@{billCheckoutInfo.runKm+ "公里"}' 不報錯```
#####解決和建議
```android:text='@{monthlyBeanBinding.onlineCount + @string/dan}'```
我會在跟同事核實為什么一個人的拼接沒問題另一個人報錯,建議是用getStringXXX的方式來拼接,那樣可以避免這些問題,如果非要拼接就要用@String/XXX的方式.
希望以后不要再遇到這樣的問題,耽擱了一段時間,但是我還是喜歡win系統(tǒng),總感覺文件系統(tǒng)就應(yīng)該是win這樣而不是mac那樣,很不習(xí)慣.
###測試評論網(wǎng)友的方法好用
有人詢問是如何配置,截圖貼明,編譯時候會有嘆號,不過沒關(guān)系,就跟高德地圖報錯864個,但是不影響使用.
![圖片.png](http://upload-images.jianshu.io/upload_images/1927528-628f12d0330b42dd.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
最后放上CC
![圖片.png](http://upload-images.jianshu.io/upload_images/1927528-9bc3ee3b692c99c3.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)