铸造“findViewById(R.id)”到“按钮”是多余的

时间:2018-02-02 16:49:51

标签: java android android-studio qr-code barcode-scanner

所以我正在尝试为QR码构建扫描仪和生成器。

这是我的扫描仪代码:

 private Button scan_btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_reader);
    scan_btn = (Button) findViewById(R.id.scan_btn);
    final Activity activity = this;
    scan_btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            IntentIntegrator integrator = new IntentIntegrator(activity);
            integrator.setDesiredBarcodeFormats(IntentIntegrator.QR_CODE_TYPES);
            integrator.setPrompt("Scan");
            integrator.setCameraId(0);
            integrator.setBeepEnabled(false);
            integrator.setBarcodeImageEnabled(false);
            integrator.initiateScan();
        }
    });
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
    if(result != null){
        if(result.getContents()==null){
            Toast.makeText(this, "You cancelled the scanning", Toast.LENGTH_LONG).show();
        }
        else {
            Toast.makeText(this, result.getContents(),Toast.LENGTH_LONG).show();
        }
    }
    else {
        super.onActivityResult(requestCode, resultCode, data);
    }
}}

我收到了这样的警告:  铸造 'findViewById(R.id.scan_btn)' 到 '按钮' 是多余的

会影响我的应用吗?因为当我试图打开我的应用程序时,它突然崩溃。

更新:

这是我的生成器代码:

public class GeneratorActivity extends AppCompatActivity {

EditText text;
Button gen_btn;
ImageView image;
String text2Qr;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_generator);
    text = findViewById(R.id.text);
    gen_btn = findViewById(R.id.gen_btn);
    image = findViewById(R.id.image);
    gen_btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            text2Qr = text.getText().toString().trim();
            MultiFormatWriter multiFormatWriter = new MultiFormatWriter();
            try{
                BitMatrix bitMatrix = multiFormatWriter.encode(text2Qr, BarcodeFormat.QR_CODE,200,200);
                BarcodeEncoder barcodeEncoder = new BarcodeEncoder();
                Bitmap bitmap = barcodeEncoder.createBitmap(bitMatrix);
                image.setImageBitmap(bitmap);
            }
            catch (WriterException e){
                e.printStackTrace();
            }
        }
    });
}}

我对'按钮'代码的MainActivity:

public class MainActivity extends AppCompatActivity {

Button gen, scan;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    gen = findViewById(R.id.gen);
    scan = findViewById(R.id.scan);
    gen.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent gIntent = new Intent(MainActivity.this, GeneratorActivity.class);
            startActivity(gIntent);
        }
    });
    scan.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent rIntent = new Intent(MainActivity.this, ReaderActivity.class);
            startActivity(rIntent);
        }
    });
}}

更新: 冗余问题没有错。这个案例是在xml代码拼写错误上解决的。所以它已经回答了我的一个问题。谢谢。请期待我的其他问题。我很快就需要它来完成我的项目。

3 个答案:

答案 0 :(得分:0)

试试这个,更改您的代码如下:

scan_btn = findViewById(R.id.scan_btn);

答案 1 :(得分:0)

它不会影响您的代码。这是Android studio的一项新功能,可直接将小部件从XML映射到Java代码。您的应用可能因任何其他原因而崩溃

答案 2 :(得分:0)

从API 26开始,findViewById对其返回类型使用推理,因此您不再需要进行强制转换。

旧定义:

Button btn = (Button) findViewById(R.id.btn)

新定义:

<T extends View> T findViewById(R.id.value)

因此,如果您的编译Sdk至少为26,则意味着您可以使用它。不需要铸造。