android - 如何修复错误 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
解决方案
我怀疑在
actualnm = FileInputStream(amountofnm).bufferedReader().use {
it.readText().toFloat()
}
你得到的东西不能转换成浮点数。(我相信一个空字符串就足够了)。您可以尝试toFloatOrNull
以某种方式处理 null:
https ://kotlinlang.org/api/latest/jvm/stdlib/kotlin.text/to-float-or-null.html
推荐阅读
- java - 计算多个字符串之间的 levenshtein 距离
- python - 如何为 Kafka 转换 CSV 或 DB 记录数据,以及如何将其恢复为另一端的 csv 或 DF
- html - 带有 3 个水平点的 HTML 按钮样式
- c# - 在 Visual Studio 和 Xcode 中努力入门 - “未定义符号 _main”
- python - 为什么列表中的项目不能正常工作?-请看我的简单代码
- go - 切片或数组是否充当全局范围?
- installation - 使用 .msi 更新正在运行的应用程序
- sql - 同一 ID 的多个响应 - 创建附加列以保留两个响应
- perl - 在单个 Perl 脚本中,我可以关闭并重新打开 STDIN 吗?
- javascript - 如何从 Gatsby 的 url 中删除插入的页码