数字格式异常无效int

时间:2016-03-16 06:21:16

标签: android sqlite numberformatexception

我必须从列表视图中为我的sq lite添加值。在我的列表视图中,有两个编辑文本和文本视图。我只想从每个编辑文本中获取值,并将其乘以相应的文本视图值。当我运行应用程序时,我不需要为每个编辑文本输入数据。由于这个原因,我以“数字格式异常:无效的int”结尾。从其他示例中我可以理解,对空值进行乘法可能会导致错误。如何从迭代中跳过包含编辑文本的空值? 这是我的代码

protected void InsertDb() {
// TODO Auto-generated method stub
 DatabaseHelper databasecontroller = new DatabaseHelper(Orders.this);
 List<Map<String, String>> data = null;
 data = new ArrayList<Map<String, String>>();

   if(list != null){

        for(int i = 0; i< list.getChildCount();i++){

            View vie = list.getChildAt(i);

            EditText ed1= (EditText) vie.findViewById(R.id.cases);
            EditText ed2 = (EditText) vie.findViewById(R.id.pcs);
            String qty = ed1.getText().toString();

           TextView tv = (TextView)findViewById(R.id.srp);
           String imsrpv= tv.getText().toString();

            float srps = Float.valueOf(imsrpv);
            int qtys = Integer.valueOf(qty);
           float amts = srps * qtys; 
           String amount = Float.toString(amts);

           datanum.put("A",qty );
            datanum.put("B",ed2.getText().toString() );
           datanum.put("L", amount);

            Log.d("value of amnt",amount);

            databasecontroller.entercustdetails(datanum); 
        }

           }
   Log.v("compleated", data.toString());
}

提前致谢..

2 个答案:

答案 0 :(得分:2)

检查edittext中的返回值是否是正确的数字或​​者它不是null。如果有空值,它可能会给出numberformat的例外。你必须处理这个。 如果两者都正确那么你也可以

float srps=0.0;
int qtys=0;
 try
{
  srps = Float.valueOf(imsrpv);
  qtys = Integer.valueOf(qty);
}
catch (NumberFormatException e)
{
srps =//Default value you want;
qtys =//Default value you want;
}

希望它有效..

答案 1 :(得分:1)

您的问题不是您解析值的方式。有关解释:

parseFloat()parseInt()将返回原始类型intfloat,而valueOf()将返回新类型的Integer和{{} 1}}。另外,FloatparseInt()会识别加号和减号,parseFloat()不会。这就是这两种类型/方法之间的区别。你的问题似乎是,这个值是空的,你可以通过以下方式解决这个问题:

valueOf()

就像我说的,如果这些值有加号或减号并且对您的需求很重要,那么您应该使用parse方法。此外,您不需要新的//set a default float and int float srps = 0.0; int qtys = 0; //now parse the values by checking if the strings are not null or empty if(imsrpv!=null&&!imsrpv.isEmpty()){ srps = Float.valueOf(imsrpv); } if(qty!=null&&!qty.isEmpty()){ qtys = Integer.valueOf(qty); } Integer类型,因此使用Float方法更正确。