android ------- MVVM+ databing + lifecycle 错误集锦

15 篇文章 0 订阅

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();
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Qt MVVM(Model-View-ViewModel)是一种基于Qt框架的设计模式,用于构建用户界面(UI)和业务逻辑的解耦合的应用程序。它是基于传统的MVC(Model-View-Controller)模式的进一步演化。 在Qt MVVM中,Model负责数据的管理和操作,它提供了底层数据对象和数据操作的接口。View是用户界面的呈现,它通过绑定机制和ViewModel交互,以显示数据和响应用户的操作。ViewModel是连接Model和View的桥梁,它将Model的数据转化为View所需的格式,并将用户的输入和操作转化为Model所需的格式。ViewModel还提供了数据绑定机制,以确保Model和View之间的同步。 通过使用Qt MVVM,我们可以实现以下优点: 1. 解耦合:通过将业务逻辑与用户界面解耦合,使得代码易于维护和测试。ViewModel充当了Model和View之间的中间层,使得它们可以独立地进行修改和调整。 2. 可维护性:由于代码的解耦合,使得我们可以更容易地对应用程序进行修改和更新。当需要改变用户界面或业务逻辑时,只需要修改ViewModel或Model的代码,而不会影响其他部分。 3. 可测试性:MVVM模式提供了更好的测试性,我们可以更容易地编写单元测试,以验证Model和ViewModel的功能是否正常工作。这使得我们可以更好地管理和保证代码的质量。 4. 数据绑定:Qt MVVM提供了高效的数据绑定机制,使得我们可以非常简便地将数据与用户界面关联起来。这大大减少了手动更新UI的工作量,提高了开发效率。 总之,Qt MVVM是一种强大的设计模式,可以帮助我们构建易于维护和测试的应用程序。通过解耦合和数据绑定,它提供了一种更合理和高效的方法来管理用户界面和业务逻辑之间的交互。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值