我正在使用Android Studio中的移动应用程序,并有2个按钮。 每个按钮将使用Zxing库启动条形码/ QR扫描。
我遇到的问题是我将第一次扫描的结果分配给按钮文本,并且工作正常。
但是,当将第二次扫描的结果分配给它的按钮时,它不起作用,因为只有一个onActivityResult?
我知道如果我复制并粘贴代码并尝试覆盖onActivityResult2,系统将忽略它,因为系统无法识别它。
但是,我是如何解决这个问题的呢?
这是我的onActivityResult和onActivityResult2的代码,只是为了展示我想要实现的目标:
onActivityResult:
工作代码:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
if (result != null) {
//if qrcode has nothing in it
if (result.getContents() == null) {
Toast.makeText(this, "Result Not Found", Toast.LENGTH_LONG).show();
} else {
//if qr contains data
try {
//converting the data to json
JSONObject obj = new JSONObject(result.getContents());
} catch (JSONException e) {
e.printStackTrace();
if (buttonId == R.id.buttonScan) {
machineType = result.getContents();
scanBarcode.setText("Machine Type: " + machineType);
} else if (buttonId == R.id.buttonScan2) {
workOrderNumber = result.getContents();
scanWorkOrder.setText("Work Order Number: " + workOrderNumber);
}
else if (buttonId == 0) {
???
}
}
}
} else {
super.onActivityResult(requestCode, resultCode, data);
}
}
调用库的按钮:
private IntentIntegrator qrScan;
private IntentIntegrator qrScan2;
int buttonId = 0; //THIS IS GLOBAL
//Initialise Buttons
scanBarcode = findViewById(R.id.buttonScan);
scanWorkOrder = findViewById(R.id.buttonScan2);
submit = findViewById(R.id.buttonSubmit);
sharedPreferences = getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE);
//Initialize Scanners
qrScan = new IntentIntegrator(this);
scanBarcode.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
qrScan.initiateScan();
buttonId = R.id.buttonScan;
}
});
scanWorkOrder.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
qrScan.initiateScan();
buttonId = R.id.buttonScan2;
}
});
答案 0 :(得分:3)
在遵循overloading
规则时,您不能拥有两种完全相同的方法
对于两个请求,您可以使用两个不同的requestCode
以及稍后使用if
语句来标识您的请求类型或按钮点击响应
startActivityForResult (intent, 100); // 100 for button 1
startActivityForResult (intent, 101); // 101 for button 2
ActivityResult
中的
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
if (result != null) {
//if qrcode has nothing in it
if (result.getContents() == null) {
Toast.makeText(this, "Result Not Found", Toast.LENGTH_LONG).show();
} else {
//if qr contains data
try {
//converting the data to json
JSONObject obj = new JSONObject(result.getContents());
} catch (JSONException e) {
e.printStackTrace();
workOrderNumber = result.getContents();
if(requestCode == 100)
scanBarcode.setText("Machine Type: " + machineType);
else if(requestCode == 101)
scanWorkOrder.setText("Work Order Number: " + workOrderNumber);
}
}
} else {
super.onActivityResult(requestCode, resultCode, data);
}
}
答案 1 :(得分:1)
int buttonId = 0;
添加为全局变量。
buttonId = R.id.buttonScan;
添加到onClick第一个按钮。
buttonId = R.id.buttonScan2;
添加到onClick第二个按钮。
检查onActivityResult中的内容并进行相应处理。