當我嘗試按下按鈕對編輯文本求和時,我的應用程式崩潰了,我不知道如何解決,因為我看不到應用程式日志。我如何檢查我的日志?
我的代碼(MainActivity.kt):
package com.example.paymentothetrip
import android.annotation.SuppressLint
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.Window
import android.widget.Button
import android.widget.EditText
import android.widget.TextView
class MainActivity : AppCompatActivity() {
@SuppressLint("WrongViewCast")
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
requestWindowFeature(Window.FEATURE_NO_TITLE)
setContentView(R.layout.activity_main)
var kmtotal = findViewById<EditText>(R.id.ikmtotal)
var ilitro = findViewById<EditText>(R.id.ilitro)
var ikmforlit = findViewById<EditText>(R.id.ikmforlit)
val btncalcular: TextView = findViewById<Button>(R.id.btncalcular)
btncalcular.setOnClickListener{
calcular(kmtotal, ikmforlit, ilitro, )
}
}
@SuppressLint("SetTextI18n")
private fun calcular(kmtotal: EditText, ikmforlit: EditText, ilitro: EditText) {
val txtresult = findViewById<TextView>(R.id.txtresult)
var result: Double = (kmtotal.text.toString().toDouble() / ikmforlit.text.toString().toDouble()) * ilitro.toString().toDouble()
txtresult.text = "R$ $result"
}
}
日志貓:
2022-02-26 21:16:10.655 19167-19167/com.example.paymentothetrip E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.paymentothetrip, PID: 19167
java.lang.NumberFormatException: For input string: "androidx.appcompat.widget.AppCompatEditText{28c5fa0 VFED..CL. ........ 0,745-1080,883 #7f0a01df app:id/ilitro aid=1073741825}"
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2043)
at sun.misc.FloatingDecimal.parseDouble(FloatingDecimal.java:110)
at java.lang.Double.parseDouble(Double.java:538)
at com.example.paymentothetrip.MainActivity.calcular(MainActivity.kt:32)
at com.example.paymentothetrip.MainActivity.onCreate$lambda-0(MainActivity.kt:24)
at com.example.paymentothetrip.MainActivity.$r8$lambda$x4PiI7hxLHE9UUw2OiqZu2i-kE4(Unknown Source:0)
at com.example.paymentothetrip.MainActivity$$ExternalSyntheticLambda0.onClick(Unknown Source:8)
at android.view.View.performClick(View.java:7125)
at android.view.View.performClickInternal(View.java:7102)
at android.view.View.access$3500(View.java:801)
at android.view.View$PerformClick.run(View.java:27336)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7356)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
2022-02-26 21:16:10.670 19167-19167/com.example.paymentothetrip I/Process: Sending signal. PID: 19167 SIG: 9
uj5u.com熱心網友回復:
(只是解釋如何追蹤錯誤 - 修復在底部)
您的錯誤日志說這是崩潰的原因:
java.lang.NumberFormatException: For input string: "androidx.appcompat.widget.AppCompatEditText{28c5fa0 VFED..CL. ........ 0,745-1080,883 #7f0a01df app:id/ilitro aid=1073741825}"
ANumberFormatException通常是在您嘗試將某些文本轉換為數字時引起的,但您不能 - 它的格式不像可識別的數字。您在這里嘗試將 s 決議String為Doubles ,因此字串很可能包含無法讀取為有效的文本Double。
該錯誤告訴您導致它的輸入字串:
"androidx.appcompat.widget.AppCompatEditText{28c5fa0 VFED..CL. ........ 0,745-1080,883 #7f0a01df app:id/ilitro aid=1073741825}"
這就是你所呼吁toDouble()的。這顯然是錯誤的,對吧?你期待類似的東西1.234或你輸入的任何東西。該文本是對AppCompatEditText物件的參考,即小部件本身。從該小部件獲取文本內容時出現問題。
因此,讓我們看看您從這些EditTexts 中讀取文本的代碼,并嘗試將它們決議為Doubles:
var result: Double = (kmtotal.text.toString().toDouble() / ikmforlit.text.toString().toDouble())
* ilitro.toString().toDouble()
你看哪一個是不同的?對于前兩個,您正在訪問kmtotal.text并ikmforlit.text呼叫toString它,以將text內容作為字串獲取。但是對于最后一個,您沒有訪問它text- 您正在呼叫toString()它EditText本身。這就是為什么您在錯誤訊息中獲得該物件的描述 - 這就是您要決議的字串
所以解決方案是您需要將其更改為ilitro.text.toString()而不是ilitro.toString(). 我只是想解釋為什么會發生這種情況,以及如何使用錯誤日志來跟蹤問題。它也告訴你問題出在哪里:
at com.example.paymentothetrip.MainActivity.calcular(MainActivity.kt:32)
這是您代碼中堆疊跟蹤的第一行,這是您的代碼在錯誤發生之前所做的最后一件事(第 32 行MainActivity)。這是開始尋找錯誤的好地方!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/435794.html
標籤:安卓 安卓工作室 科特林 android-edittext
