使用“+”解析整数时无效的int

时间:2013-08-11 19:39:55

标签: java android android-layout

我今天刚刚为我的一个Android应用程序收到此错误。

设备nexus 7与android 4.2.2

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));

BUT 我已经定义了如下所示的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”。

首先我想知道用户如何设法在edittext中插入加号,因为毕竟不允许。 所以我检查了模拟器,不幸的是我发现即使在4.2.2版本的android中不允许使用+号。在4.2.2及更高版本中,用户可以在EditText中使用inputType =“numberSigned”从onscreenkeyboard添加加号。不幸的是,它导致parseInt错误

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

2 个答案:

答案 0 :(得分:2)

您可以在解析之前删除+

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

答案 1 :(得分:2)

  

使用“+”

解析整数时无效的int

Simly Integer.parseInt()无法识别+符号。您有两种选择:

  • 使用yourString.replace("+", "");
  • 删除此符号
  • 您可以将DecimalFormat与模式+#;-#
  • 一起使用