解决java.lang.NumberFormatException: Invalid double: "" 不丢失占位符文本

Resolve java.lang.NumberFormatException: Invalid double: "" without losing placeholder text

onCreate 上初始化 EditTexts 返回一个“”,它不能转换为有效的双精度值,因此出现此错误。使用显式值可能会有所帮助,但我会丢失 android:hint 文本。
如何在不丢失 android:hint 文本的情况下解决此问题?

Code

public class MainActivity extends Activity {

private double quant, problem, verbal;

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




    EditText quantScore = (EditText) findViewById(R.id.quant);
    EditText problemScore = (EditText) findViewById(R.id.problem);
    EditText verbalScore = (EditText) findViewById(R.id.verbal);
    Button calculate = (Button) findViewById(R.id.button);



    quant = Double.valueOf(quantScore.getText().toString());
    problem = Double.valueOf(problemScore.getText().toString());
    verbal = Double.valueOf(verbalScore.getText().toString());

    final double total = quant + problem + verbal;




    calculate.setOnClickListener(new View.OnClickListener() {


        @Override
        public void onClick(View view) {
            Toast.makeText(MainActivity.this, "The total is " +total, Toast.LENGTH_LONG).show();
        }
    });




}

Layout

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">


<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:text="Score To Percentile"
    android:id="@+id/textView"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true" />

<EditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:inputType="numberDecimal"
    android:ems="10"
    android:id="@+id/quant"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="70dp"
    android:hint="Quantitative Ability"
    android:gravity="center"
    android:textStyle="italic" />

<EditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:inputType="numberDecimal"
    android:ems="10"
    android:id="@+id/problem"
    android:layout_marginTop="50dp"
    android:layout_below="@+id/quant"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:hint="Problem Solving"
    android:gravity="center"
    android:textColorLink="#ffffdbeb"
    android:textStyle="italic" />

<EditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:inputType="numberDecimal"
    android:ems="10"
    android:id="@+id/verbal"
    android:layout_marginTop="50dp"
    android:hint="Verbal Ability"
    android:gravity="center"
    android:textColorLink="#ff48f3ff"
    android:layout_below="@+id/problem"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:textStyle="italic" />

<Button
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="Calculate"
    android:id="@+id/button"
    android:layout_below="@+id/verbal"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_marginTop="60dp"
    android:textStyle="italic"
    android:typeface="monospace" />

您应该捕获 NumberFormatException 并提供所需的默认值。

try {
   quant = Double.valueOf(quantScore.getText().toString());
} catch(NumberFormatException e) {
   quant = 0;
}

这适用于任何无法解析为 Double 的文本,不仅是当 EditText 为空时。