【问题标题】:unable to convert Edittext to int无法将 Edittext 转换为 int
【发布时间】:2021-12-30 22:56:30
【问题描述】:
class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        setContentView(R.layout.activity_main)

        var X: EditText = findViewById(R.id.num12)
        var Y: EditText = findViewById(R.id.num2)
        var B: Button = findViewById(R.id.btn1)
        var vir: TextView = findViewById(R.id.virw)

        var X1: Int = X.text.toString().toInt()
        var Y1: Int = Y.text.toString().toInt()
        B.setOnClickListener() {
            vir.text = "add new ${addtwonumber(X1, Y1)}"
        }
    }
    
    private fun addtwonumber(a:Int,b:Int):Int{
        return a+b
    }
}
Error 2021-11-20 20:29:39.940 29733-29733/com.example.calibrate
E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.calibrate, PID: 29733
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.calibrate/com.example.calibrate.MainActivity}:
java.lang.NumberFormatException: For input string: ""
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3528)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3703)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2152)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:250)
        at android.app.ActivityThread.main(ActivityThread.java:7886)
        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:970)
     Caused by: java.lang.NumberFormatException: For input string: ""
        at java.lang.Integer.parseInt(Integer.java:627)
        at java.lang.Integer.parseInt(Integer.java:650)
        at com.example.calibrate.MainActivity.onCreate(MainActivity.kt:23)
        at android.app.Activity.performCreate(Activity.java:8108)
        at android.app.Activity.performCreate(Activity.java:8092)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1309)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3501)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3703) 
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85) 
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) 
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2152) 
        at android.os.Handler.dispatchMessage(Handler.java:106) 
        at android.os.Looper.loop(Looper.java:250) 
        at android.app.ActivityThread.main(ActivityThread.java:7886) 
        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:970) 
2021-11-20 20:29:39.957 29733-29733/com.example.calibrate I/Process:
Sending signal. PID: 29733 SIG: 9

【问题讨论】:

    标签: android kotlin android-edittext


    【解决方案1】:

    看这行报错:
    java.lang.NumberFormatException: For input string: ""
    您有一个空字符串(因为您的 EditText 最初是空的),您正试图将其转换为 Int。这就是您收到NumberFormatException 的原因。

    您可以使用String.toIntOrNull() 修复错误。如果字符串无法转换为Int,此函数将返回null,而不是抛出异常。然后您可以使用 elvis 运算符(?:)为 null Int 使用默认值。

    val X1: Int = X.text.toString().toIntOrNull() ?: 0 // Use zero if string does not represent an Int
    

    附带说明,对于不会更改的属性,请使用vals 而不是vars,并为它们提供更好的名称(X、Y、X1、Y2 看起来不太好)

    【讨论】:

      【解决方案2】:

      一开始你的EditTexts是空的,所以错误是因为它不能将空的“”转换为整数,所以你可以先检查它是否不为空或使用toIntOrNull()函数,但你也想得到当用户点击按钮时的 x 和 y 不是在开头,所以正确的方法是将代码从 onCreate 移动到 onClickListener 主体

      B.setOnClickListener() {
          val X1: Int = X.text.toString().toInt()
          val Y1: Int = Y.text.toString().toInt()
          vir.text = "add new ${addtwonumber(X1, Y1)}"
      }
      

      【讨论】:

        猜你喜欢
        • 2016-05-30
        • 2013-02-08
        • 2020-10-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-02
        • 2016-03-15
        • 1970-01-01
        相关资源
        最近更新 更多