当我将 EditText 字段留空时应用程序崩溃

App crashes when i leave the EditText field empty

我需要帮助! 将 EditText 留空会导致我的应用程序崩溃。我已经浏览了 stackflow 和 google 上的所有解决方案,但似乎没有任何解决方案。 Logcat 中的两个错误是:

java.lang.reflect.InvocationTargetException

java.lang.NumberFormatException: Invalid double: ""
package com.example.curencyconverter;

import androidx.appcompat.app.AppCompatActivity;

import android.annotation.SuppressLint;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {


    @SuppressLint("DefaultLocale")
    public void convert(View view) {
        EditText inputEditText = (EditText) findViewById(R.id.inputEditText);
        double inputAmount = Double.parseDouble(inputEditText.getText().toString());
        try {
            inputAmount = Double.parseDouble(inputEditText.getText().toString());
        } catch (NumberFormatException e) {
            inputAmount = Double.parseDouble(null);
        }

        Double poundAmount = inputAmount * 0.75;
        Toast.makeText(MainActivity.this, "£" + String.format("%.2f", poundAmount), Toast.LENGTH_LONG).show();
        Log.i("Amount", inputEditText.getText().toString());
    }



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}

XML 文件:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <EditText
        android:id="@+id/inputEditText"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:ems="10"
        android:hint="@string/enter_amount"
        android:importantForAutofill="no"
        android:inputType="text"
        android:textAllCaps="false"
        android:textAppearance="@style/TextAppearance.AppCompat.Large"
        android:textColor="#F10606"
        android:textColorHint="#006064"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.07" />

    <Button
        android:id="@+id/converter"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:onClick="convert"
        android:text="@string/converter"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.498"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/inputEditText"
        app:layout_constraintVertical_bias="0.0" />

</androidx.constraintlayout.widget.ConstraintLayout>

try-catch 没有做任何事情,因为您在初始化变量时已经不安全地调用了 parseDouble(没有 try-catch)。只需将其初始化为 0 或您想要的任何默认值即可。

double inputAmount = 0;

此外,parseDouble(null) 生成 NullPointerException。将 inputAmount 设置为 catch 中的默认值。