概述
1.
Caused by: java.lang.RuntimeException: view tag isn't correct on view:null
导致这个错误的原因是:模块之间的layout资源冲突了. 以我的项目为例子:
我在Mvvm 模块中使用了DataBindingUtil.setContentView(this,R.layout.activity_main); 而 app模块中也有一个activity_main;在运行后,会合并多个库项目,导致Mvvm 模块中的activity_main被app 模块中的覆盖了。而app 模块中的activity_main 的根标签不是<layout>,所有导致了上面的错误。解决方法修改Mvvm 模块中的activity_main名字为mvvm_activity_main. 这里也体现了一个开发规范的问题,在模块中的资源命名要以 module_xxx 的格式。最后提下,如何查看自己项目是否有类似的问题的快捷键,Analyze -----> Inspect code
2.
android.databinding.tool.util.LoggedErrorException: Found data binding errors.
****/ data binding error ****msg:Could not find accessor com.example.mvvm.viewmodel.LoginViewModel.mPhone
android.databinding.tool.util.LoggedErrorException: Found data binding errors.
****/ data binding error ****msg:The expression mViewModel.getMPhone() cannot be inverted: Two-way binding cannot resolve a setter for java.lang.String property 'mPhone'
上面两个错误的原因:都是一样,没有找到下面代码中的mPhone的set和get方法: 所以不能双向绑定
private MutableLiveData<String> mPhone= new MutableLiveData<>();
解决方法:(注意:如果是kotlin, 就不要写get和set方法,kotlin自带了。)
Java需要自己设置mPhone的 get和set方法,但是要注意变量的get和set方法的命名规则:get或者set + 变量名字 (第一个字母大写) 。不要用快捷键自动生成
修改如下:
private MutableLiveData<String> mPhone= new MutableLiveData<>();
public void setMPhone(String mPhone) {
this.mPhone.postValue(mPhone);
}
public String getMPhone() {
return mPhone.getValue();
}
3.
android.databinding.tool.util.LoggedErrorException: Found data binding errors.
****/ data binding error ****msg:Cannot find the getter for attribute 'android:text' with value type android.arch.lifecycle.MutableLiveData<java.lang.String> on android.widget.EditText. **** data binding error ****
错误原因: 因为你将MutableLiveData 对象绑定给了控件EditText:text中.而text 需要的是字符串
private MutableLiveData<String> mPhone= new MutableLiveData<>();
public MutableLiveData<String> getMPhone() {
return mPhone;
}
public void setmPhone(MutableLiveData<String> mPhone) {
this.mPhone = mPhone;
}
解决办法:(注意:如果是kotlin, 就不要写mPhone的get和set方法,kotlin自带了。)
private MutableLiveData<String> mPhone= new MutableLiveData<>();
public void setMPhone(String mPhone) {
this.mPhone.postValue(mPhone);
}
public String getMPhone() {
return mPhone.getValue();
}
最后
以上就是谦让石头为你收集整理的android ------- MVVM+ databing + lifecycle 错误集锦的全部内容,希望文章能够帮你解决android ------- MVVM+ databing + lifecycle 错误集锦所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复