Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 为什么每次单击按钮时都会出现无效整数异常?_Android - Fatal编程技术网

Android 为什么每次单击按钮时都会出现无效整数异常?

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

我有一个安卓类。我从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
  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();
}