如何在ListView上对EditText求值?

时间:2015-09-25 23:06:51

标签: android listview sum

我列出了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

1 个答案:

答案 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()