java - 如何在其他活动中发送从二维码扫描仪读取的字符串
问题描述
我在 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);
}
}
解决方案
您可以通过 将扫描活动的结果获取到您的主要活动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
}
}
}
推荐阅读
- nginx - Nginx WebLogic 端口 URL 重定向问题
- geoserver - WMTS Tiles (EPSG:32643) 在原始图像上移动了 0.3 米
- python - python中整数列表的科学记数法
- google-bigquery - 将 Google Ads(Campaign Manager)数据与 Google BigQuery 中的 GA360 数据相结合
- snakemake - 集群执行失败后保留 Snakemake 作业脚本?
- apache-kafka-connect - Apache Kafka Connect 与 OracleApps
- mysql - 从 mysql 迁移到 oracle 命中 ora-01400
- mysql - 如何在mysql对象中写入where条件
- c# - C# - 包含字母条目和字母数字条目的排序列表
- c# - 如何减少洋葱架构中的注入服务?