所以我正在尝试为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代码拼写错误上解决的。所以它已经回答了我的一个问题。谢谢。请期待我的其他问题。我很快就需要它来完成我的项目。
答案 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,则意味着您可以使用它。不需要铸造。