我是靠谱客的博主 谦让石头,最近开发中收集的这篇文章主要介绍android ------- MVVM+ databing + lifecycle 错误集锦,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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 错误集锦所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(54)

评论列表共有 0 条评论

立即
投稿
返回
顶部