0

今日、Android アプリケーションの 1 つでこのエラーが発生しました。

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

しかし 、私は以下に示すように編集テキストを定義しました

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

inputType が numberSigned の場合、キーボードは10進数または「2」や「-3」などのマイナス記号のみを許可することを知っています。

最初に、ユーザーがどのようにして編集テキストにプラス記号を挿入できたのか疑問に思いました。結局のところ、それは許可されていないからです。だから私はエミュレーターをチェックインしましたが、残念ながら4.2.2より前のバージョンのAndroidでは+記号が許可されていないことがわかりました。4.2.2 以降では、ユーザーは、inputType="numberSigned" を使用して EditText のオンスクリーン キーボードからプラス記号を追加できます。残念ながら parseInt でエラーが発生します

問題を説明した後、誰かが回避策を見つけたのか、それともAndroidのすべてのバージョンに対して有効な解決策を提供できるのか疑問に思いますか?

4

2 に答える 2