0

今天我的一个 android 应用程序出现了这个错误。

带有 android 4.2.2 的设备 nexus 7

java.lang.NumberFormatException: Invalid int: "+5"
at java.lang.Integer.invalidInt(Integer.java:138)
at java.lang.Integer.parse(Integer.java:375)
at java.lang.Integer.parseInt(Integer.java:366)
at java.lang.Integer.parseInt(Integer.java:332)
at sk.onClick(Unknown Source)
at android.view.View.performClick(View.java:4240)
at android.view.View$PerformClick.run(View.java:17721)
at android.os.Handler.handleCallback(Handler.java:730)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5103)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)

映射错误日志后,我发现错误来自这行代码。

EditText itemBonus = (EditText) dialogView.findViewById(R.id.item_bonus);
String itemBonusString = itemBonus.getText().toString().trim();
if (itemBonusString.equals("")) {
    itemBonusString = "0";
}
item.setItemBonus(Integer.parseInt(itemBonusString));

但是 我已经定义了editext,如下所示

<EditText
android:id="@+id/item_bonus"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:inputType="numberSigned" />

我知道当 inputType 是 numberSigned 时,键盘只允许十进制数字或减号,如“2”或“-3”。

首先,我想知道用户如何设法在编辑文本中插入加号,因为毕竟它是不允许的。所以我检查了模拟器,不幸的是我发现即使在 4.2.2 之前的 android 版本中不允许使用 + 号。在 4.2.2 和更高版本中,用户可以在带有 inputType="numberSigned" 的 EditText 中添加屏幕键盘上的加号。不幸的是,这会导致 parseInt 出现错误

因此,在解释了问题之后,我想知道是否有人找到了解决方法,或者可以为所有版本的 android 提供有效的解决方案?

4

2 回答 2

2

您可以+在解析之前删除它:

item.setItemBonus(Integer.parseInt(itemBonusString.replaceAll("+", "")));

于 2013-08-11T19:44:55.330 回答
2

用“+”解析整数时 int 无效</p>

SimlyInteger.parseInt()无法识别+符号。你有两个选择:

  • 在使用之前删除此符号yourString.replace("+", "");
  • 您可以将 DecimalFormat 与模式一起使用+#;-#
于 2013-08-11T19:44:56.110 回答