項(xiàng)目中遇到的一個(gè)問(wèn)題,分享出來(lái),希望大家可以不踩這個(gè)坑
前話,公司是用Mac開(kāi)發(fā),在家里有時(shí)候會(huì)用Win加加班,公司的項(xiàng)目有幾個(gè)使用了Databinding,在Mac上運(yùn)行都是沒(méi)有問(wèn)題的,我推到Git上,回家拉下來(lái),其中的一個(gè)報(bào)錯(cuò)了,另外的都沒(méi)有問(wèn)題!
分析問(wèn)題
- 公司項(xiàng)目本身沒(méi)有錯(cuò),在家里報(bào)錯(cuò),問(wèn)題應(yīng)該不在代碼層面上
- 之前處理過(guò)一次utf8的問(wèn)題,win下gradle 添加這么一行東西
tasks.withType(JavaCompile) {
options.encoding = "UTF-8"
}
那么這一次極有可能仍然是編碼的問(wèn)題,其中報(bào)錯(cuò)有兩行比較重要的摘錄出來(lái)
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.
我們遇到的坑大概率是別人踩過(guò)的坑,Google或者其他的搜索引擎,據(jù)說(shuō)是IDE的一部分,于是找到了這個(gè)博客,確定了自己的猜測(cè)。
http://blog.csdn.net/lablenet/article/details/52305529
題外話&問(wèn)題原因&個(gè)人習(xí)慣
Databinding最好的使用,通常是后臺(tái)返回直接展示的數(shù)據(jù),而實(shí)際上后臺(tái)返回的數(shù)據(jù)有時(shí)候需要我們?cè)谔幚硪幌?,我的同事的方法是跟鏈接博客中一樣,喜歡在xml里面做操作,(比如android:text='@{monthBean.onlineCount+"單"}')我自己則是喜歡在bean對(duì)象里面做處理,通過(guò)前綴為getStringXXX的方式來(lái)獲取,而導(dǎo)致這個(gè)問(wèn)題原因正是因?yàn)樵趚ml里面做拼接的字符不能被正確的解析,
那么問(wèn)題來(lái)了,另外其他的項(xiàng)目,同事也有在外面做處理,為什么沒(méi)有報(bào)錯(cuò),猜測(cè)是特定的字符不能被解析造成的。
剩下的就是力氣活,由于有段時(shí)間沒(méi)有拉這個(gè)代碼,積累的較多,我不能確定是什么時(shí)候造成的,只能猜測(cè)著用Git不斷的切換,定位到產(chǎn)生的原因.
不管怎樣終于找到了,奇怪的是有的拼接沒(méi)有問(wèn)題有的拼接有問(wèn)題,這其實(shí)是另外兩個(gè)同事寫的,看來(lái)同樣是mac還是有些差別,anyway總算解決了可以繼續(xù)寫應(yīng)該寫的了.
android:text='@{monthBean.onlineCount+"單"}' 報(bào)錯(cuò)
android:text='@{billCheckoutInfo.runKm+ "公里"}' 不報(bào)錯(cuò)```
#####解決和建議
```android:text='@{monthlyBeanBinding.onlineCount + @string/dan}'```
我會(huì)在跟同事核實(shí)為什么一個(gè)人的拼接沒(méi)問(wèn)題另一個(gè)人報(bào)錯(cuò),建議是用getStringXXX的方式來(lái)拼接,那樣可以避免這些問(wèn)題,如果非要拼接就要用@String/XXX的方式.
希望以后不要再遇到這樣的問(wèn)題,耽擱了一段時(shí)間,但是我還是喜歡win系統(tǒng),總感覺(jué)文件系統(tǒng)就應(yīng)該是win這樣而不是mac那樣,很不習(xí)慣.
###測(cè)試評(píng)論網(wǎng)友的方法好用
有人詢問(wèn)是如何配置,截圖貼明,編譯時(shí)候會(huì)有嘆號(hào),不過(guò)沒(méi)關(guān)系,就跟高德地圖報(bào)錯(cuò)864個(gè),但是不影響使用.

最后放上CC
