我列出了ListView中产品的颜色变化。每个列表颜色变体都有一个EditText。我想在单击按钮时尝试生成验证流程订单。
这是我的代码:
btnOrder.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int count = listView.getAdapter().getCount();
String[] listData = new String[count];
int[] listData2 = new int[count];
int sum = 0;
try {
for (int i = 0; i < count; i++) {
View quantity=listView.getChildAt(i);
if (quantity.findViewById(R.id.quantityOrder) != null){
EditText quantityOrder = (EditText) quantity.findViewById(R.id.quantityOrder);
listData[i] = quantityOrder.getText().toString();
listData2[i] = Integer.parseInt(quantityOrder.getText().toString()); // set edittext to int
sum += listData2[i];
jsonObject.put("params_"+i,listData[i]); // put to params for volley request
}
}
if (sum < 1) {Toast.makeText(getApplicationContext(),
"Sorry, you need to fill Order Quantity", Toast.LENGTH_SHORT) // validation input if edittext empty
.show();} else {
Log.d(TAG, jsonObject.toString()); }
} catch (JSONException e) {
e.printStackTrace();
}
}
});
我的应用程序强行关闭。这里是错误代码
09-25 23:01:05.679 32623-32623/id.nijushop.ikutan E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.NumberFormatException: Invalid int: ""
at java.lang.Integer.invalidInt(Integer.java:138)
at java.lang.Integer.parseInt(Integer.java:359)
at java.lang.Integer.parseInt(Integer.java:332)
at id.nijushop.ikutan.ProductDetail$1.onClick(ProductDetail.java:150)
at android.view.View.performClick(View.java:4084)
at android.view.View$PerformClick.run(View.java:16966)
at android.os.Handler.handleCallback(Handler.java:615)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4745)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)
请,有人修复我的代码......我想我需要对此做些什么
quantity.findViewById(R.id.quantityOrder)// need to set to Interger
答案 0 :(得分:0)
问题出在这一行:
listData2[i] = Integer.parseInt(quantityOrder.getText().toString()); // set edittext to int
如果传递的字符串不是有效的整数字符串,Integer.parseInt(String string)
方法将返回int或抛出NumberFormatException
。空字符串 - ""
不构成有效整数,因此如果EditText
为空,则会出现问题。
你需要使用try-catch阻止parseInt
来保护NumberFormatException
的执行并采取相应的行动 - 中止该方法或者其他方法,但如果你没有,你显然无法继续算术提供了有效的号码。
此外,对您有帮助的是,在xml文件的EditText
元素中,包含inputType
属性,例如:
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="number|numberSigned" />
此inputType
属性将导致系统使用自动inputFilter和仅提供数字软键盘,因此用户无法输入无效数字(在这种情况下,只有有符号整数)。但是,这仍然不会考虑空输入,因此您需要捕获NumberFormatException
或检查EditText中的字符串是否为空。 (!string.isEmpty()
)