报错信息

E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.cxyzy.demo, PID: 4520
android.content.res.Resources$NotFoundException: String resource ID #0x1
at android.content.res.Resources.getText(Resources.java:410)
at android.content.res.HwResources.getText(HwResources.java:465)
at android.widget.TextView.setText(TextView.java:5589)
at com.cxyzy.demo.databinding.ItemUserBindingImpl.executeBindings(ItemUserBindingImpl.java:129)
at androidx.databinding.ViewDataBinding.executeBindingsInternal(ViewDataBinding.java:448)
at androidx.databinding.ViewDataBinding.executePendingBindings(ViewDataBinding.java:420)
at com.cxyzy.demo.UserAdapter$ViewHolder.bind(UserAdapter.kt:40)
at com.cxyzy.demo.UserAdapter.onBindViewHolder(UserAdapter.kt:16)
at com.cxyzy.demo.UserAdapter.onBindViewHolder(UserAdapter.kt:12)

分析

1)根据报错代码行打开报错代码(这个代码时dataBinding自动生成的)

​com.cxyzy.demo.databinding.ItemUserBindingImpl.executeBindings(ItemUserBindingImpl.java:129)​

安卓DataBinding报错:android.content.res.Resources$NotFoundException: String resource ID #0x1_android

2)较为明显,userId是int类型,但是直接被setText当作入参了。

3)对应xml文件(存在:​​android:text="@{user.id}"​​),此为问题症结。

<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingStart="10dp"
android:text="@{user.id}"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:text="id" />

解决方案

1)修改​​android:text="@{user.id}"​​为​​android:text="@{Integer.toString(user.id)}"​

这样对应的binding代码为:

安卓DataBinding报错:android.content.res.Resources$NotFoundException: String resource ID #0x1_java_02

2)修改​​android:text="@{user.id}"​​为​​android:text='@{user.id+""}'​

这样对应的binding代码为:

安卓DataBinding报错:android.content.res.Resources$NotFoundException: String resource ID #0x1_javascript_03

经验总结

在xml中使用变量赋值text时,需要保证类型是字符串类型。

附录

更多技术总结好文,请关注:「程序园中猿」