我必须从列表视图中为我的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());
}
提前致谢..
答案 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()
将返回原始类型int
和float
,而valueOf()
将返回新类型的Integer
和{{} 1}}。另外,Float
,parseInt()
会识别加号和减号,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
方法更正确。