也談DataBinding遇到的惡心的Bug,踩坑踐行者。

blade555 7年前發布 | 12K 次閱讀 MacOS Git 安卓開發 Android開發 移動開發

項目中遇到的一個問題,分享出來,希望大家可以不踩這個坑

前話,公司是用Mac開發,在家里有時候會用Win加加班,公司的項目有幾個使用了Databinding,在Mac上運行都是沒有問題的,我推到Git上,回家拉下來,其中的一個報錯了,另外的都沒有問題!

用過Databinding的同學都是知道,Databinding本身報錯就是全部報錯,并且不會有具體的錯誤,而且項目中還有Dagger2,Dagger2報錯跟Databinding一個尿性報錯那么多,都不是解決的依據。這一次報錯,那錯誤直接需要拖好幾頁,連個重點都找不到!醉了

分析問題

  • 公司項目本身沒有錯,在家里報錯,問題應該不在代碼層面上
  • 之前處理過一次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或者其他的搜索引擎,據說是IDE的一部分,于是找到了這個博客,確定了自己的猜測。

題外話&問題原因&個人習慣

Databinding最好的使用,通常是后臺返回直接展示的數據,而實際上后臺返回的數據有時候需要我們在處理一下,我的同事的方法是跟鏈接博客中一樣,喜歡在xml里面做操作,(比如android:text='@{monthBean.onlineCount+"單"}')我自己則是喜歡在bean對象里面做處理,通過前綴為getStringXXX的方式來獲取,而導致這個問題原因正是因為在xml里面做拼接的字符不能被正確的解析, 那么問題來了,另外其他的項目,同事也有在外面做處理,為什么沒有報錯,猜測是特定的字符不能被解析造成的。

剩下的就是力氣活,由于有段時間沒有拉這個代碼,積累的較多,我不能確定是什么時候造成的,只能猜測著用Git不斷的切換,定位到產生的原因.

不管怎樣終于找到了,奇怪的是有的拼接沒有問題有的拼接有問題,這其實是另外兩個同事寫的,看來同樣是mac還是有些差別,anyway總算解決了可以繼續寫應該寫的了.

android:text='@{monthBean.onlineCount+"單"}'            報錯
android:text='@{billCheckoutInfo.runKm+ "公里"}'      不報錯

解決和建議

android:text='@{monthlyBeanBinding.onlineCount + @string/dan}'

我會在跟同事核實為什么一個人的拼接沒問題另一個人報錯,建議是用getStringXXX的方式來拼接,那樣可以避免這些問題,如果非要拼接就要用@String/XXX的方式.

希望以后不要再遇到這樣的問題,耽擱了一段時間,但是我還是喜歡win系統,總感覺文件系統就應該是win這樣而不是mac那樣,很不習慣.

最后放上CC

圖片.png

 

來自:http://www.jianshu.com/p/b969992cd833

 

 本文由用戶 blade555 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!