首页 > 解决方案 > 如何在其他活动中发送从二维码扫描仪读取的字符串

问题描述

我在 Android 中使用 QR 码扫描仪,我想要拆分值,但我无法将结果从 ScanActivity 发送到 Main_Activity,导致程序崩溃,并且下面出现错误

(原因:java.lang.NullPointerException:尝试在 com.exampledemo.parsaniahardik.scanbarcodeqrdemonuts 的空对象引用上调用虚拟方法“java.lang.String android.os.BaseBundle.getString(java.lang.String)”。 MainActivity.onCreate(MainActivity.java:26))

任何人都可以帮助我吗?


*** MainActivity Code 
@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


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

        Bundle my_split = getIntent().getExtras();
        String st = my_split.getString("tvresult1");     


        String totale = st;
        String [] parte = totale.split("-");

        part1 = parte[0];
        part2 = parte[1];
        part3 = parte[2];
        part4 = parte[3];
        part5 = parte[4];
        part6 = parte[5];

        MainActivity.Name.setText(""+part1);
        MainActivity.TNumber.setText(""+part2);
        MainActivity.date.setText(""+part3);
        MainActivity.numberOf.setText(""+part4);
        MainActivity.sum.setText(""+part5);
        MainActivity.amount.setText(""+part6);


 btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this, ScanActivity.class);
                startActivity(intent);
            }
        });






**ScanActivity

       package com.exampledemo.parsaniahardik.scanbarcodeqrdemonuts;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;

import me.dm7.barcodescanner.zbar.ZBarScannerView;

public class ScanActivity extends AppCompatActivity implements ZBarScannerView.ResultHandler {
    private ZBarScannerView mScannerView;

    String part1,part2,part3,part4,part5,part6;
    //camera permission is needed.

    @Override
    public void onCreate(Bundle state) {
        super.onCreate(state);
        mScannerView = new ZBarScannerView(this);    // Programmatically initialize the scanner view
        setContentView(mScannerView);                // Set the scanner view as the content view
    }

    @Override
    public void onResume() {
        super.onResume();
        mScannerView.setResultHandler(this); // Register ourselves as a handler for scan results.
        mScannerView.startCamera();          // Start camera on resume
    }

    @Override
    public void onPause() {
        super.onPause();
        mScannerView.stopCamera();           // Stop camera on pause
    }

    @Override
    public void handleResult(me.dm7.barcodescanner.zbar.Result result) {
        // Do something with the result here
        Log.v("kkkk", result.getContents()); // Prints scan results
        Log.v("uuuu", result.getBarcodeFormat().getName()); // Prints the scan format (qrcode, pdf417 etc.)



      // MainActivity.tvresult.setText(result.getContents());
            // onBackPressed();

        Intent mainActivity = new Intent(this,MainActivity.class);
        mainActivity.putExtra("tvresult1",result.getContents().toString());
        startActivity(mainActivity);

    }




}

标签: javaandroid

解决方案


您可以通过 将扫描活动的结果获取到您的主要活动onActivityResult(),您可以像这样实现它:

 btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(MainActivity.this, ScanActivity.class);
            startActivityForResult(intent, 500) //500 is our request code, we will use this to check if incoming data is what we want. You can put any integer value in it
        }
    });

扫描活动

    @Override
public void handleResult(me.dm7.barcodescanner.zbar.Result result) {
    // Do something with the result here
    Log.v("kkkk", result.getContents()); // Prints scan results
    Log.v("uuuu", result.getBarcodeFormat().getName()); // Prints the scan format (qrcode, pdf417 etc.)

    Intent mainActivity = new Intent(this,MainActivity.class);
    mainActivity.putExtra("tvresult1",result.getContents().toString());
    setResult(Activity.RESULT_OK, mainActivity);
    finish(); //exiting your ScanActivity
}

现在,我们需要做的就是覆盖onActivityResult()你的MainActivity

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

 if (requestCode == 500) { //Remember the result code we set in startActivityForResult()? This is how we identify our incoming data
     if(resultCode == Activity.RESULT_OK){  //Data is received
        String result= data.getStringExtra("tvresult1"); 
        //Your result is received
     } 
   }
}

推荐阅读