Android 为什么每次单击按钮时都会出现无效整数异常?
我有一个安卓类。我从get extra获得一些数据,这些数据显示得很好。所有数据都是字符串。这是我的班级:Android 为什么每次单击按钮时都会出现无效整数异常?,android,Android,我有一个安卓类。我从get extra获得一些数据,这些数据显示得很好。所有数据都是字符串。这是我的班级: package adapter; public class AddToCart extends Activity { EditText quantity=null; TextView total=null; TextView name=null; TextView price=null; TextView ava=null; @Override prote
package adapter;
public class AddToCart extends Activity {
EditText quantity=null;
TextView total=null;
TextView name=null;
TextView price=null;
TextView ava=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.info);
Intent intent = getIntent();
final String itemprice = intent.getStringExtra("price");
String itemname = intent.getStringExtra("item");
final String itemava = intent.getStringExtra("ava");
int imagehandler = intent.getIntExtra("image", 0);
Log.e("image handler",imagehandler+"");
name = (TextView)findViewById(R.id.textView2);
price = (TextView)findViewById(R.id.textView4);
total = (TextView)findViewById(R.id.textView7);
ava = (TextView)findViewById(R.id.textView9);
quantity = (EditText)findViewById(R.id.editText1);
Button addtocart = (Button)findViewById(R.id.button1);
ImageView imageview=(ImageView)findViewById(R.id.imageView1);
name.setText(itemname);
price.setText(itemprice);
ava.setText(itemava);
imageview.setImageResource(imagehandler);
addtocart.setOnClickListener(new OnClickListener() {
int currentava = Integer.parseInt(itemava);
@Override
public void onClick(View v) {
try{
String checked = quantity.getText().toString();
if(checked==null) {
Toast.makeText(AddToCart.this,"please enter quantity for your item", Toast.LENGTH_LONG).show();
}
else {
int x=0;
double y=0.0;
x = Integer.parseInt(quantity.getText().toString());
y = Double.parseDouble(itemprice);
Log.e("x",x+"");
Log.e("y",y+"");
double totalprice=x*y;
total.setText(totalprice+"");
Toast.makeText(AddToCart.this,"your item added succesfully !", Toast.LENGTH_LONG).show();
}
}//view
catch(Exception e){
e.printStackTrace();
}
}
});
}
}
正如您所看到的,数量是编辑文本,当插入一些数字时,将其乘以价格值,并在文本视图中显示总价,这在我单击按钮时效果很好,但我真正需要做的是使用两个if语句处理此功能。首先,如果数量的编辑文本为空,并且用户单击我希望显示toast的按钮,显示“请为数量输入值”,另一条语句是如果数量大于可用值,则拒绝该值,并单击toast:“请输入小于可用值”它不工作,因为我有一个无效的整数值异常。请检查我的代码有什么问题,以及如何处理以前的问题?全局声明“itemava”,然后重试文本仍然可以为空。。。试着这样做:
import android.text.TextUtils;
String value = quantity.getText().toString();
if (TextUtils.isEmpty(value)) {
// enter a value toast
} else if (!TextUtils.isDigitsOnly(value)) {
// must be numeric toast (notice the exclamation mark in condition)
} else {
int valueInt = Integer.parseInt(value);
// ...
}
在我看来你用的是什么
if(checked==null){
Toast.makeText(AddToCart.this,"please enter quantity for your item", Toast.LENGTH_LONG).show();
}
这有两种选择
1.
可能是最简单的
添加的是|quantiy.isEmpty()
对于字符串为空的情况,我有很多问题需要解决,这是最好的方法,并且使用了非常容易使用的内置函数
2.
不太容易,但可能是更好的选择
与其检查字符串本身是否为空,不如检查editText
是否已更改,然后确保它已更改为非空字符串,如1中所示。要执行此操作,请添加textChangedListener
如是:
quantity.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// TODO Auto-generated method stub
//set a textChangedFlag to true
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
}
});
这将需要一个布尔标志,该标志应始终初始化为false。然后,在onTextChanged方法中将标志设置为true之后,仍然应该使用与1中类似的方法对字符串进行双重检查,以确保安全(这可能有些过分,但我倾向于在谨慎方面出错)。
if(textChangedFlag && !(checked == NULL || quantity.isEmpty())){
//do your math here
}
else{
Toast.makeText(AddToCart.this,"please enter a valid quantity", Toast.LENGTH_LONG).show();
}
什么是TextUtils?你能解释更多吗?它是Android API的一部分,作为日常简单字符串验证检查的助手类,更多信息,请查看文档:
if(textChangedFlag && !(checked == NULL || quantity.isEmpty())){
//do your math here
}
else{
Toast.makeText(AddToCart.this,"please enter a valid quantity", Toast.LENGTH_LONG).show();
}