如何在扫描后存储二维码的结果?

时间:2016-06-05 02:46:05

标签: java android qr-code

我对Android Studio相对较新。我正在使用QR码扫描仪。我在网上发现了这个,我正在使用它:

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

import com.google.zxing.Result;
import me.dm7.barcodescanner.zxing.ZXingScannerView;

public class MainActivity extends AppCompatActivity implements ZXingScannerView.ResultHandler {
    private ZXingScannerView mScannerView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mScannerView = new ZXingScannerView(this);   // Programmatically initialize the scanner view
        setContentView(mScannerView);

        mScannerView.setResultHandler(this); // Register ourselves as a handler for scan results.
        mScannerView.startCamera();         // Start camera
    }

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

    @Override
    public void handleResult(Result rawResult) {
        // Do something with the result here

        Log.e("handler", rawResult.getText()); // Prints scan results
        Log.e("handler", rawResult.getBarcodeFormat().toString()); // Prints the scan format (qrcode)

        // show the scanner result into dialog box.
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("Scan Result");
        builder.setMessage(rawResult.getText());
        AlertDialog alert1 = builder.create();
        alert1.show();


        // If you would like to resume scanning, call this method below:
        mScannerView.resumeCameraPreview(this);
    }
}

我想将扫描结果存储在另一个活动的ListView中,但我不确定如何使其工作。我已经知道如何创建ListView,我只是希望能够将结果传递给下一个活动。我已经到处看了看但没找到任何有帮助的东西。任何一点帮助将不胜感激。非常感谢你。

3 个答案:

答案 0 :(得分:0)

根据您的描述我假设您必须一起/连续扫描一堆条形码并将它们传递给下一个列表视图的活动。

在发件人活动中,您需要将所有扫描结果存储在HashMap / Arraylist中,具体取决于您选择的Collection。我正在解释HashMap以及如何跨活动发送它。

发件人活动:

Intent intent = new Intent(FromActivity.this, ToActivity.class);
intent.putExtra("SCAN_RESULTS", hashMap);
startActivity(intent);

接收者活动:

Intent intent = getIntent();    
HashMap<String, String> hashMap = (HashMap<String, String>)      intent.getSerializableExtra("SCAN_RESULTS");

希望这有帮助。

答案 1 :(得分:0)

我正在做类似的事情,但使用谷歌视觉API,我建议查看这些包:

  • com.google.android.gms.vision.barcode.Barcode
  • com.google.android.gms.vision.barcode.BarcodeDetector

以及this stack overflow post

我相信你的问题的一般答案,但是如何在活动之间发送数据是使用一个Intent对象并指定你要发送的项目&#34; extra&#34;在那个意图中。

Intent data = new Intent( getApplicationContext(), MyListViewActivity.class );
data.putExtra( "Barcode", barcodeObject );
startActivity( data );

另一种选择是从ListView活动开始扫描活动并使用&#34; startActivityForResult&#34;方法

Intent scanIntent = new Intent( getApplicationContext(), MyScanActivity.class );
startActivityForResult( scanIntent, "BARCODE_CAPTURE" );

然后你将实现onActivityResult

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == "BARCODE_CAPTURE") {
        if( resultCode == CommonStatusCodes.SUCCESS ) {
            if (data != null) {
                Barcode barcode = data.getParcelableExtra("Barcode");
             ...
            }}}}

在条形码捕获活动中,您将以Intent返回结果。

 Intent data = new Intent();
 data.putExtra("Barcode", barcode);
 setResult(CommonStatusCodes.SUCCESS, data);
 finish();

答案 2 :(得分:0)

您可以使用

   ArrayList<String> listOfBarcodes = new ArrayList<String>();
   //whenever you capture a new barcode add it to this list
   listOfBarcodes.add(currentBarcode);

   //when you are done adding barcodes call the ListView activity and pass
   //it the listOfBarcodes as a Serializable.
   Intent intent = new Intent(getApplicationContext(), ActivityToStart.class);
   intent.putExtra("Barcodes", listOfBarcodes);
   startActivity(Intent);

然后在那个Activity中你会有一个大列表的条形码。将新条形码添加到其中并刷新ListView

  Intent callingIntent= getIntent();
  ArrayList<String> listOfBarcode = callingIntent.getSerializableExtra("Barcodes");

  completeList.add(listOfBarcodes);
  ArrayAdapter<String> aA = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, completeList);
  ListView lV = (ListView) findViewById(R.id.my_list_id);
  lV.setAdapter(aA);