switch - case表达式必须是常量表达式,我不能创建if-else语句

时间:2013-07-25 05:16:07

标签: android switch-statement qr-code

这是QR码生成的项目,这是代码的来源 That is the source 这里是一个常数情况的错误 我知道它必须放入If-else但是我不知道在这个项目中谁能帮助我?

//That is a QR code generator project`enter code here`
    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        switch (v.getId()) {
          case R.id.button1://<--- is the error .. I can't make it If-else statement
           EditText qrInput = (EditText) findViewById(R.id.QR);
           String qrInputText = qrInput.getText().toString();
           Log.v(LOG_TAG, qrInputText);

           //Find screen size
           WindowManager manager = (WindowManager) getSystemService(WINDOW_SERVICE);
           Display display = manager.getDefaultDisplay();
           Point point = new Point();
           display.getSize(point);
           int width = point.x;
           int height = point.y;
           int smallerDimension = width < height ? width : height;
           smallerDimension = smallerDimension * 3/4;

           //Encode with a QR Code image
           QREncoder qrCodeEncoder = new QREncoder(qrInputText, 
                     null, 
                     Contents.Type.TEXT,  
                     BarcodeFormat.QR_CODE.toString(), 
                     smallerDimension);
           try {
            Bitmap bitmap = qrCodeEncoder.encodeAsBitmap();
            ImageView myImage = (ImageView) findViewById(R.id.imageView1);
            myImage.setImageBitmap(bitmap);

           } catch (WriterException e) {
            e.printStackTrace();
           }


           break;

           // More buttons go here (if any) ...

          }
         }
    }

1 个答案:

答案 0 :(得分:6)

查看官方博客文章:

http://tools.android.com/recent/switchstatementconversion

http://tools.android.com/tips/non-constant-fields

基本上,库项目中的资源常量不再是“最终的”。来自ADT网站:

换句话说,常量在库项目中不是最终的。原因很简单:当组合多个库项目时,字段的实际值(必须是唯一的)可能会发生冲突。在ADT 14之前,所有字段都是最终字段,因此,所有库都必须在使用它们时将所有资源和相关Java代码与主项目一起重新编译。这对性能不利,因为它使构建非常慢。它还阻止了分发不包含源代码的库项目,限制了库项目的使用范围。

所以,如果你修复它会将开关转换为if和else ...

int id = view.getId();
if (id == R.id.button1) {
    action1();
} else if (id == R.id.button2) {
    action2();
} else if (id == R.id.button3) {
    action3();
}