【问题标题】:java.lang.NumberFormatException type casting in kotlinkotlin 中的 java.lang.NumberFormatException 类型转换
【发布时间】:2018-03-07 00:18:41
【问题描述】:

我想做体重指数,很简单。但我不能那样做。我在类型转换中遇到错误,但我没有解决问题。哈塔姆

java.lang.NumberFormatException: Invalid int: "android.support.v7.widget.AppCompatTextView。

我猜是

result = (kiloText.toString (). ToInt ()) / ((boy.toString (). ToInt () 
boy.tostring (). toınt ())). todoubl a ()

这段代码有类型转换错误我该怎么办?

MainActivity.kt

class MainActivity : AppCompatActivity() {

lateinit var kilo:SeekBar
lateinit var boy: EditText
lateinit var hesapla:Button
lateinit var ideal: TextView
lateinit var kiloText: TextView

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    kilo=findViewById(R.id.seekbar)
    boy=findViewById(R.id.edt_boy)
    hesapla=findViewById(R.id.hesapla)
    ideal=findViewById(R.id.ideal)
    kiloText=findViewById(R.id.kilo)

    kilo.max=150
    kilo.setOnSeekBarChangeListener(object : SeekBar.OnSeekBarChangeListener{
        override fun onProgressChanged(p0: SeekBar?, p1: Int, p2: Boolean) {
            kiloText.text=p1.toString()
        }

        override fun onStartTrackingTouch(p0: SeekBar) {
            kiloText.text= p0.progress.toString()
        }

        override fun onStopTrackingTouch(p0: SeekBar) {
            kiloText.text=p0.progress.toString()
        }

    })

    hesapla.setOnClickListener({
        var sonuc:Double
        sonuc=(kiloText.toString().toInt())/((boy.toString().toInt())*(boy.toString().toInt())).toDouble()
      ideal.text=sonuc.toString()


    })

}
 }

【问题讨论】:

    标签: android text casting kotlin


    【解决方案1】:

    你的问题是

    java.lang.NumberFormatException: Invalid int: "android.support.v7.widget.AppCompatTextView.

    所以我们需要知道原因。

    1.使用kiloText.toString()boy.toString()会导致NumberFormatException

    2.如果kiloText.textboy.toString()为空,会导致NumberFormatException

    你可以试试这个方法。

    改变

    sonuc=(kiloText.toString().toInt())/((boy.toString().toInt())*(boy.toString().toInt())).toDouble()
    ideal.text=sonuc.toString()
    

    sonuc=(kiloText.text.toString().toInt())/((boy.text.toString().toInt())*(boy.text.toString().toInt())).toDouble()
    ideal.text=sonuc.toString()
    

    编辑

    source

    /**
    * Parses the string as an [Int] number and returns the result.
    * @throws NumberFormatException if the string is not a valid representationof a number.
    */
    @kotlin.jvm.JvmVersion
    @kotlin.internal.InlineOnly
    public inline fun String.toInt(): Int = java.lang.Integer.parseInt(this)
    

    【讨论】:

    • 单独验证字段会不会更好,这样您就不会出现“某些字符串不是数字,因此无法进行计算”错误?
    • 是的,会更好。@PaulHicks
    • 为了更安全,我添加了这样的textView_countdown.text?.toString()。就我而言,我该如何使用 .toInt() ? @KeLiuyue
    • 尝试这样使用 .textView_countdown.text?.toString()?.toInt() 。你应该检查textView_countdown.text?.toString()是否为空 .@esu
    • 您可以查看NumberFormatException - if the string is not a valid representation of a number. .https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.text/to-int.html
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-13
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多