DataBinding错误 java.lang.NoClassDefFoundError: Failed resolution of: Landroid/arch/lifecycle/Observer

在学习DataBinding的时候,App出现奔溃:Rejecting re-init on previously-failed class java.lang.Class<android.databinding.ViewDataBinding$LiveDataListener>: java.lang.NoClassDefFoundError: Failed resolution of: Landroid/arch/lifecycle/Observer;

具体错误日志信息如下:

2019-07-23 23:30:01.033 14075-14075/com.hust_twj.zademo I/art: Rejecting re-init on previously-failed class java.lang.Class<android.databinding.ViewDataBinding$LiveDataListener>: java.lang.NoClassDefFoundError: Failed resolution of: Landroid/arch/lifecycle/Observer;
2019-07-23 23:30:01.033 14075-14075/com.hust_twj.zademo I/art:     at void android.databinding.ViewDataBinding.<clinit>() (ViewDataBinding.java:120)
2019-07-23 23:30:01.033 14075-14075/com.hust_twj.zademo I/art:     at android.databinding.ViewDataBinding android.databinding.DataBinderMapperImpl.getDataBinder(android.databinding.DataBindingComponent, android.view.View, int) (DataBinderMapperImpl.java:15)
2019-07-23 23:30:01.033 14075-14075/com.hust_twj.zademo I/art:     at android.databinding.ViewDataBinding android.databinding.DataBindingUtil.bind(android.databinding.DataBindingComponent, android.view.View, int) (DataBindingUtil.java:199)
2019-07-23 23:30:01.033 14075-14075/com.hust_twj.zademo I/art:     at android.databinding.ViewDataBinding android.databinding.DataBindingUtil.bindToAddedViews(android.databinding.DataBindingComponent, android.view.ViewGroup, int, int) (DataBindingUtil.java:327)
2019-07-23 23:30:01.033 14075-14075/com.hust_twj.zademo I/art:     at android.databinding.ViewDataBinding android.databinding.DataBindingUtil.setContentView(android.app.Activity, int, android.databinding.DataBindingComponent) (DataBindingUtil.java:306)
2019-07-23 23:30:01.033 14075-14075/com.hust_twj.zademo I/art:     at android.databinding.ViewDataBinding android.databinding.DataBindingUtil.setContentView(android.app.Activity, int) (DataBindingUtil.java:284)
2019-07-23 23:30:01.033 14075-14075/com.hust_twj.zademo I/art:     at void com.hust_twj.zademo.third_part.data_binding.DataBindingActivity.onCreate(android.os.Bundle) (DataBindingActivity.java:17)
2019-07-23 23:30:01.033 14075-14075/com.hust_twj.zademo I/art:     at void android.app.Activity.performCreate(android.os.Bundle) (Activity.java:6679)
2019-07-23 23:30:01.033 14075-14075/com.hust_twj.zademo I/art:     at void android.app.Instrumentation.callActivityOnCreate(android.app.Activity, android.os.Bundle) (Instrumentation.java:1118)
2019-07-23 23:30:01.033 14075-14075/com.hust_twj.zademo I/art:     at android.app.Activity android.app.ActivityThread.performLaunchActivity(android.app.ActivityThread$ActivityClientRecord, android.content.Intent) (ActivityThread.java:2618)
2019-07-23 23:30:01.033 14075-14075/com.hust_twj.zademo I/art:     at void android.app.ActivityThread.handleLaunchActivity(android.app.ActivityThread$ActivityClientRecord, android.content.Intent, java.lang.String) (ActivityThread.java:2726)
2019-07-23 23:30:01.033 14075-14075/com.hust_twj.zademo I/art:     at void android.app.ActivityThread.-wrap12(android.app.ActivityThread, android.app.ActivityThread$ActivityClientRecord, android.content.Intent, java.lang.String) (ActivityThread.java:-1)
2019-07-23 23:30:01.033 14075-14075/com.hust_twj.zademo I/art:     at void android.app.ActivityThread$H.handleMessage(android.os.Message) (ActivityThread.java:1477)
2019-07-23 23:30:01.033 14075-14075/com.hust_twj.zademo I/art:     at void android.os.Handler.dispatchMessage(android.os.Message) (Handler.java:102)
2019-07-23 23:30:01.033 14075-14075/com.hust_twj.zademo I/art:     at void android.os.Looper.loop() (Looper.java:154)
2019-07-23 23:30:01.033 14075-14075/com.hust_twj.zademo I/art:     at void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:6119)
2019-07-23 23:30:01.033 14075-14075/com.hust_twj.zademo I/art:     at java.lang.Object java.lang.reflect.Method.invoke!(java.lang.Object, java.lang.Object[]) (Method.java:-2)
2019-07-23 23:30:01.033 14075-14075/com.hust_twj.zademo I/art:     at void com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run() (ZygoteInit.java:886)
2019-07-23 23:30:01.034 14075-14075/com.hust_twj.zademo I/art:     at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:776)

相关资源如下:

public class User {

    public String name;

    public int age;

    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }

}

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">

    <data>
        <variable name="user"  type="com.hust_twj.zademo.third_part.data_binding.User"/>
    </data>

   <LinearLayout
       android:layout_width="match_parent"
       android:layout_height="match_parent"
       android:orientation="vertical">
       <TextView
           android:id="@+id/tv_name"
           android:layout_width="match_parent"
           android:layout_height="100dp"
           android:text="@{user.name}"
           android:gravity="center"
           android:background="@color/red"
           tools:text="tv_name"/>

       <TextView
           android:id="@+id/tv_age"
           android:layout_width="match_parent"
           android:layout_height="100dp"
           android:text="@{user.age}"
           tools:text="tv_age"
           android:gravity="center"
           android:background="@color/red"/>
   </LinearLayout>

</layout >

原因:实体类定义的变量age为int类型,而xml中对年龄赋值的时候直接为:android:text="@{user.age}",这就犯了 Java 中的textView.seText(18)一样的错误。正确的姿势为:android:text="@{String.valueOf(user.age)}",等价于 Java 代码 textView.seText(String.valueOf(18))

找到这个原因花了一些时间,主要是对 DataBinding 不熟悉;而且,日志的错误信息也很含糊,不方便定位问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值