首页 > 解决方案 > 如何修复错误 java.lang.NumberFormatException:对于输入字符串:“1kotlin.jvm.internal.IntCompanionObject@b8225a”

问题描述

我是 kotlin 的菜鸟,但我为一个应用程序编写了以下代码:MainActivity:

enter code here

maingame activity

    override fun onCreate(savedInstanceState: Bundle?) {

        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_maingame)
        val savebutton = findViewById<Button>(R.id.button6)
        val amulti = findViewById<Button>(R.id.button5)
        val aclick = findViewById<Button>(R.id.button4)
        val nmulti = findViewById<Button>(R.id.button3)
        val block = findViewById<Button>(R.id.button)
        val money = findViewById<TextView>(R.id.textView2)
        val normalmultiplier = 1.toFloat()
        var moneyactual  = 1.toFloat()
        var nmulticost = 10.toFloat()
        val path = getFilesDir()
        var actualnm = 1.toFloat()
        val letDirectory = File(path, "save")
        letDirectory.mkdirs()
        val amountofmoney = File(letDirectory, "amountofmoney")
        val path2 = getFilesDir()
        val letDirectory2 = File(path2, "save")
        letDirectory.mkdirs()
        val amountofnm = File(letDirectory, "amountofnm")
        val PREFS_NAME = "MyPrefsFile"
        val pathautoclick = getFilesDir()
        val directoryautoclick = File(path, "save")
        directoryautoclick.mkdirs()
        val amountofautoclick = File(directoryautoclick, "amountofac" )
        val pathaccost = getFilesDir()
        val costofac = File(directoryautoclick, "costofac" )
        val settings = getSharedPreferences(PREFS_NAME, 0)
        var accost = 700.toInt()
        if (settings.getBoolean("my_first_time", true)) {
            //the app is being launched for first time, do something
            moneyactual = 1.toFloat()
            FileOutputStream(amountofmoney).bufferedWriter().use {
                it.write(1.toString())
            }
            FileOutputStream(amountofautoclick).bufferedWriter().use {
                it.write(0.toInt())
            }
            FileOutputStream(amountofnm).bufferedWriter().use {
                it.write(1.toFloat().toString())
            }
            FileOutputStream(costofac).bufferedWriter().use {
                it.write(700.toInt())
            }
            accost = 700.toInt()

            var actualnm = 1.0.toFloat()
            // record the fact that the app has been started at least once
            settings.edit().putBoolean("my_first_time", false).commit()
        }
        accost = FileInputStream(costofac).bufferedReader().use {
            it.read()
        }

        actualnm = FileInputStream(amountofnm).bufferedReader().use {
            it.readText().toFloat()
        }
        nmulticost = 10 * actualnm
        money.text = moneyactual.toString()
        moneyactual = FileInputStream(amountofmoney).bufferedReader().use {
            it.readText().toFloat()
        }
        block.setOnClickListener {
            moneyactual = FileInputStream(amountofmoney).bufferedReader().use {
                it.readText().toFloat()
            }
            moneyactual = moneyactual + (1 * actualnm)
            nmulticost = 10 * actualnm
            nmulti.text = "Click Multiplier" + nmulticost.roundToInt()
            FileOutputStream(amountofmoney).bufferedWriter().use {
                it.flush()
                it.write(moneyactual.toString())
            }
        }
        nmulti.setOnClickListener {
            if (moneyactual < nmulticost) {
                Toast.makeText(this, "you dont have enough money", Toast.LENGTH_SHORT).show()
            }
            else{
                moneyactual = moneyactual - nmulticost
                nmulticost = actualnm * 10
                actualnm = actualnm + 1.05.toFloat()
                FileOutputStream(amountofmoney).bufferedWriter().use {
                    it.write(moneyactual.toString())
                }
                FileOutputStream(amountofnm).bufferedWriter().use {
                    it.write(actualnm.toString())
                }
            }
        }
        aclick.setOnClickListener {
            if (moneyactual < accost) {
                Toast.makeText(this, "you dont have enough money", Toast.LENGTH_SHORT).show()
            }
            else{
                accost = FileInputStream(costofac).bufferedReader().use {
                    it.readText().toInt()
                }

                moneyactual = moneyactual - accost
                nmulticost = actualnm * 10
                actualnm = actualnm + 1.05.toFloat()
                FileOutputStream(amountofmoney).bufferedWriter().use {
                    it.write(moneyactual.toString())
                }
                accost = accost + 700
                FileOutputStream(costofac).bufferedWriter().use {
                    it.write(accost.toString())
                }
            }
        }
        val mainHandler = Handler(Looper.getMainLooper())

        mainHandler.post(object : Runnable {
            override fun run() {
                changetext()
                mainHandler.postDelayed(this, 10)
            }
        })
        mainHandler.post(object : Runnable {
            override fun run() {
                autoclick(3)
                mainHandler.postDelayed(this, 1000)
            }
        })


    }
    public fun changetext(){
        val path = getFilesDir()
        val letDirectory = File(path, "save")
        letDirectory.mkdirs()
        val amountofmoney = File(letDirectory, "amountofmoney")
        val money = findViewById<TextView>(R.id.textView2)
        money.text = FileInputStream(amountofmoney).bufferedReader().use {
            it.readText()
        }
    }
    public fun autoclick(int: Int){
        val path = getFilesDir()
        val letDirectory = File(path, "save")
        letDirectory.mkdirs()
        val amountofmoney = File(letDirectory, "amountofmoney")
        var actualmoney = FileInputStream(amountofmoney).bufferedReader().use {
            it.readText()
        }
        actualmoney = actualmoney + Int
        FileOutputStream(amountofmoney).bufferedWriter().use {
            it.flush()
            it.write(actualmoney.toString())
        }
    }
}


我试图在我的手机上运行该应用程序,当我按下 mainactivity 上的激活活动按钮时它崩溃了,我试图调试它,这就是它所说的:''' E/AndroidRuntime: FATAL EXCEPTION: main

Process: com.example.game, PID: 16773
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.game/com.example.game.maingame}: java.lang.NumberFormatException: For input string: "1kotlin.jvm.internal.IntCompanionObject@b8225a"
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2946)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3081)
    at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
    at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
    at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1831)
    at android.os.Handler.dispatchMessage(Handler.java:106)
    at android.os.Looper.loop(Looper.java:201)
    at android.app.ActivityThread.main(ActivityThread.java:6810)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:873)
 Caused by: java.lang.NumberFormatException: For input string: "1kotlin.jvm.internal.IntCompanionObject@b8225a"
    at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2043)
    at sun.misc.FloatingDecimal.parseFloat(FloatingDecimal.java:122)
    at java.lang.Float.parseFloat(Float.java:451)
    at com.example.game.maingame.onCreate(maingame.kt:90)
    at android.app.Activity.performCreate(Activity.java:7224)
    at android.app.Activity.performCreate(Activity.java:7213)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1272)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2926)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3081) 
    at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78) 
    at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108) 
    at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1831) 
    at android.os.Handler.dispatchMessage(Handler.java:106) 
    at android.os.Looper.loop(Looper.java:201) 
    at android.app.ActivityThread.main(ActivityThread.java:6810) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:873) 

I/om.example.gam: ProcessProfilingInfo new_methods=962 已保存 saved_to_disk=1 resolve_classes_delay=8000


标签: androidkotlin

解决方案


我怀疑在

actualnm = FileInputStream(amountofnm).bufferedReader().use {
        it.readText().toFloat()
}

你得到的东西不能转换成浮点数。(我相信一个空字符串就足够了)。您可以尝试toFloatOrNull以某种方式处理 null: https ://kotlinlang.org/api/latest/jvm/stdlib/kotlin.text/to-float-or-null.html


推荐阅读