深夜爬坑——Kotlin+DataBinding方法命名引起繫結問題
已經夜裡一點多了,還是想分享下。
class WalletViewModel : ViewModel() { var balance: MutableLiveData<String> = MutableLiveData() lateinit var disposable: Disposable init { balance.value = "未知" } fun getBalance() { disposable = RetrofitFactory.retrofitApi.getRestMoney(OTL.getToken().bearerAccessToken) .observeOn(AndroidSchedulers.mainThread()) .subscribeOn(Schedulers.io()) .subscribe({ balance.value = it.balance }, { showToast("獲取餘額失敗") balance.value = "未知" }) } override fun onCleared() { disposable.dispose() } }
這樣一段程式碼死活繫結報錯,java.lang.RuntimeException: Found data binding errors.
****/ data binding error ****msg:Could not find accessor .....
搜了下stackoverflow,說是繫結的物件一定要有get方法,可是我用的kotlin,非private變數預設就有get、set方法。這下一下子失了智,先是懷疑LiveData的問題,可是Google明確說了現在AS3.1以後可以用LiveData替代ObserveFiled。
完了,繼續死磕,但是毫無頭緒。
試著強行加get方法,當然還是報錯,但是突然發現我加的get方法和我下面獲取資料的getBalance()方法重名!一下子茅塞頓開,DataBinding預設去拿這個方法來獲取我的liveData當然獲取不到了。
最近寫Kotlin+DataBinding+LiveData+MVVM有點上頭,熬了幾天終於有了點漸入佳境的趕腳。不說了,快兩點了還沒洗澡