【发布时间】:2013-08-08 12:34:40
【问题描述】:
Android 不断报告我无法在手机上重现的用户崩溃。 我可以找到似乎不正确的行:
cursor.moveToFirst();
elechs=cursor.getString(2);
elecls=cursor.getString(3);
gass=cursor.getString(4);
waters=cursor.getString(5);
cursor.close();
if (elechs.length()!=0){
elechdb=Double.valueOf(elechs);
}
else {
elechdb=0.0;
}
if (elecls.length()!=0){
elecldb=Double.valueOf(elecls);}
else {
elecldb=0.0;
}
if (gass.length()!=0){
gasdb=Double.valueOf(gass);
}
else {
gasdb=0.0;
}
if (waters.length()!=0){
waterdb=Double.valueOf(waters);
}
else {
waterdb=0.0;
}
elecldb=Double.valueOf(elecls);
gasdb=Double.valueOf(gass);
waterdb=Double.valueOf(waters);
如果我查看代码,它没有任何意义。
我想我忘了删除最后三行。首先我检查字符串。如果字符串为空,它将将该值存储为零。
如果单元格为空,不正确的最后三行也会尝试生成double。这会导致很多崩溃。但不在我的机器上。
我认为不可能将 a 做成一个空单元格。
有人知道为什么这个错误不会让我的手机崩溃吗?
【问题讨论】:
-
你试过调试它吗?如果你的字符串是空的,当你到达这些行时会发生什么?
-
调试并没有给我太多帮助,因为它不会崩溃。它似乎仍然会进一步计算为零值
-
用户会遇到哪些异常?如果 cursor 为 null 或任何 getString 调用返回 null,您可能会收到 NullPointerExceptions。如果任一字符串无法解析为双精度,您可能会收到 NumberFormatException。
-
他们收到:java.lang.NumberFormatException 并且 stacktrace 显示在 dalvik.system.NativeStart.main(Native Method) 原因:java.lang.NumberFormatException: Invalid double: "" at java.lang .StringToReal.invalidReal(StringToReal.java:63)
-
尝试使用 try/catch 块解析字符串,因为 Double.valueOf 会抛出 NumberFormatException。
标签: double android double crash-reports value-of