2扫描仪,但一个onActivityResult?

时间:2017-12-12 17:14:21

标签: java android zxing barcode-scanner

我正在使用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;

        }
    });

2 个答案:

答案 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中的内容并进行相应处理。