我有4 TextView
个。其中3个显示另一个活动中EditText
输入值的结果,并以共享首选项保存。
第四个TextView
需要显示之前3 TextView
的总和。
我收到错误:NumberFormatingException invalid double ""
这是我的代码:
// GETTING VALUES FOR FIRST 3 TEXTVIEWS
textViewRezultat1RMPotisakSKlupe.setText(settings.getString("benchSave", null));
textViewRezultat1RMCucanj.setText(settings.getString("squatSave", null));
textViewRezultat1RMMrtvoDizanje.setText(settings.getString("deadSave", null));
//LITTLE BIT OF MATH TO GET VALUE OF FOURTH
double prvo = Double.parseDouble(textViewRezultat1RMPotisakSKlupe.getText().toString());
double drugo = Double.parseDouble(textViewRezultat1RMCucanj.getText().toString());
double trece = Double.parseDouble(textViewRezultat1RMMrtvoDizanje.getText().toString());
double rezultat = 0;
rezultat = (prvo + drugo + trece);
textViewRezultat1RMUkupno.setText(Double.toString(rezultat));
这就像一个魅力。
问题是,如果第一次启动应用程序(没有存储数据),我会收到上面提到的错误。
任何人都可以帮我解决吗?
答案 0 :(得分:1)
实际上,当尝试从不表示数字的字符串解析double或仅仅为null时,会出现问题。
<强> parseDouble 强>
public static double parseDouble(String s) 抛出NumberFormatException
返回一个初始化为由指定String表示的值的新double,由double类的valueOf方法执行。
<强>参数强>: s - 要解析的字符串。
返回:由...表示的double值 字符串参数。
投掷:
NullPointerException - 如果字符串为null
NumberFormatException - 如果字符串不包含可解析的 双
因此,您需要测试这两种情况,以确保您没有遇到任何一种错误情况。
String prvoString = textViewRezultat1RMPotisakSKlupe.getText().toString();
Double prvo;
if(prvoString != null) { //shouldn't occur
try {
prvo = Double.parseDouble(prvoString);
} catch (NumberFormatException ex) { //inputs like "" or "banana"
//Tell the user he is entering invalid input
}
}
那么,当您的应用首次运行时,为什么会出现这种情况?加载视图并尝试解析空(&#34;&#34;)字符串时,将执行parseDouble代码。
答案 1 :(得分:0)
在执行double prvo = Double.parseDouble()
之前,请始终检查您的字符串是否有效,因为如果您的字符串为空,就像""
一样,则无法将其转换为Double,因为它不是数字
所以在每次Double.parseDouble
检查之前都是这样 -
if (!TextUtils.isEmpty(yourString))
Double.parseDouble(yourString);