解决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
为空时。
在 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
为空时。