Android java.lang.RuntimeException:启动带有EditText(数字)双向数据绑定的片段时调用observer方法失败

Android java.lang.RuntimeException:启动带有EditText(数字)双向数据绑定的片段时调用observer方法失败,android,android-databinding,android-livedata,android-jetpack,Android,Android Databinding,Android Livedata,Android Jetpack,我正在尝试将MutableLiveData绑定到EditText元素。我已经实现了绑定适配器,但是当我启动活动时,我得到一个错误:java.lang.RuntimeException:调用观察者方法失败 谢谢你的帮助 代码: 视图模型 val serverPort=MutableLiveData(9330) XML <data> <variable name="vm" type="...LoginViewM

我正在尝试将
MutableLiveData
绑定到
EditText
元素。我已经实现了绑定适配器,但是当我启动活动时,我得到一个错误:
java.lang.RuntimeException:调用观察者方法失败

谢谢你的帮助

代码:

视图模型

val serverPort=MutableLiveData(9330)

XML

    <data>
        <variable
            name="vm"
            type="...LoginViewModel" />
    </data>
    <com.google.android.material.textfield.TextInputEditText
                        android:layout_width="match_parent"
                        android:layout_height="50dp"
                        android:layout_gravity="center"
                        android:inputType="number"
                        android:text="@={vm.serverPort}" />

您必须尝试将字符串值用于set
android:text

 <TextView
      android:layout_width="match_parent"
      android:layout_height="50dp"
      android:layout_gravity="center"
      android:inputType="number"
      android:text="@{String.valueOf(vm.serverPort)}" />

如果使用数据绑定:双向转换。 这有点困难,因为静态方法没有反转,当然也没有对任意字符串格式的转换

字符串到基元的转换非常常见,可以使用带有双向数据绑定表达式的字符串连接语法来完成,但只能使用空字符串:

<EditText android:text="@={`` + vm.serverPort}" .../>


我还建议您参考本文以了解更多信息。

我已经尝试过了,但我想实现双向绑定。所以当我像你提到的那样做的时候,我得到一个例外,valueOf没有逆运算。嗨@kauler请检查我的更新答案,如果你有任何疑问,我也会要求你参考链接,让我知道这是否有帮助。非常感谢。这就是解决办法。我使用字符串连接,因为我的用例在momant上没有那么复杂。
<EditText android:text="@={`` + vm.serverPort}" .../>