我正在尝试将我的代码从直接使用.xml文件转换为通过数据绑定工作,但是即使我使用的是.toInt(),我还是会得到NumberFormatException。
这是我最初创建的按钮,它起了作用,并允许我将客户保存到本地db:
btn_save_customer.setOnClickListener {
val customerName = customer_name.text.toString()
val customerAge = customer_age.text.toString().toInt()
mainViewModel.addCustomer(customerName, customerAge) // this saves the customer to db
customer_name.text.clear()
customer_age.text.clear()
}这是我的当前按钮,它适用于数据绑定并在每次单击时崩溃:
binding.apply {
btnSaveCustomer.setOnClickListener {
val customerNameTxt = customerName.toString()
val customerAgeTxt = customerAge.toString().toInt()
mainViewModel.addCustomer(customerNameTxt, customerAgeTxt) // this saves the customer to db
customerName.clearAnimation()
customerAge.clearAnimation()
}
}这就是我一直犯的错误:
java.lang.NumberFormatException: For input string: "androidx.appcompat.widget.AppCompatEditText{4358b5e VFED..CL. .F...... 30,297-690,393 #7f08008e app:id/customer_age aid=1073741825}"
at java.lang.Integer.parseInt(Integer.java:615)
at java.lang.Integer.parseInt(Integer.java:650)
at com.example.observertest.MainActivity.onCreate$lambda-2$lambda-1(MainActivity.kt:57)
at com.example.observertest.MainActivity.$r8$lambda$yqaLK6RPkbxnU-obodzyYhUCsqM(Unknown Source:0)
at com.example.observertest.MainActivity$$ExternalSyntheticLambda0.onClick(Unknown Source:4)
at android.view.View.performClick(View.java:7448)
at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:1194)
at android.view.View.performClickInternal(View.java:7425)
at android.view.View.access$3600(View.java:810)
at android.view.View$PerformClick.run(View.java:28309)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7698)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:952)我做错了什么?我确保在customerAge editText中输入了一个数字,但没有转换为string,然后转换为Int。
发布于 2022-09-25 17:17:14
如果customerName是EditText,即使使用数据绑定,也必须使用customerName.text获取文本
但是,如果坚持使用数据绑定,则还有另一种方法。
在视图模型中添加以下代码:
@Bindable
var customerName = ""
set(value) {
field = value
notifyPropertyChanged(BR.customerName)
}然后,在您的.XML文件中,在客户名称中编辑文本,添加以下内容:
android:text="@={viewModel.customerName}"要在数据绑定布局中导入视图模型,请使用以下命令:
<data>
<variable
name="viewModel"
type="com.example.viewmodel.mainViewModel" />
</data>不要使用com.example.viewmodel.mainViewModel,而是使用您自己的地址。现在,每当您在视图模型中更改customerName的值时,您的编辑文本也将被更新,并且每当您在编辑文本中写入文本时,它将存储在视图模型中的customer name变量中。
https://stackoverflow.com/questions/73845081
复制相似问题