我正在尝试构建一个使用条形码阅读器的Android应用程序。
应用工作流程如下:
主要活动使用“startActivityForResult”启动条形码扫描活动,并收听结果事件。
条形码扫描活动侦听条形码扫描库的扫描事件,并使用“setResult”方法设置结果。
条形码扫描活动自行关闭,让主活动读取值。
以上所有工作都按预期工作,但在onActivityResult事件处理之后,应用程序终止。
在日志文件中,我只能找到一个通用的app-kill消息
您可以在下面找到代码段并注销。
主要Activity.java - 按钮单击和onActivityResult:
b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(Intent.ACTION_VIEW);
i.setClass(getBaseContext(), BarcodeScannerActivity.class);
startActivityForResult(i, 100);
}
});
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.i("BARCODE_RESULT", data.getStringExtra("displayValue"));
super.onActivityResult(requestCode, resultCode, data);
TextView t = (TextView) findViewById(R.id.textView);
t.setText(data.getStringExtra("displayValue"));
Log.i("BARCODE_RESULT", data.getStringExtra("displayValue"));
}
条形码活动 - OnBarcodeScan
public void onScanned(final Barcode barcode) {
Log.i("BARCODE", "Barcode scanned: " + barcode.displayValue);
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(getBaseContext(), "Barcode: " + barcode.displayValue, Toast.LENGTH_LONG).show();
Intent intent=new Intent();
intent.putExtra("displayValue",barcode.displayValue);
setResult(Activity.RESULT_OK, intent);
finish();
}
});
}
最后但并非最不重要的是,logcat out:
/** I/BARCODE: Barcode scanned: 8005200010448
/** I/BARCODE_RESULT: 8005200010448
/** I/BARCODE_RESULT: 8005200010448
/** I/Process: Sending signal. PID: 10012 SIG: 9
*编辑* 我刚刚在设备的日志中找到了以下异常,它在SIG:9 log
之前被抛出W/System.err: java.lang.NullPointerException: Attempt to invoke virtual method 'int com.huawei.lcagent.client.LogCollectManager.getUserType()' on a null object reference
W/System.err: at com.android.server.util.ReportTools.getUserType(ReportTools.java:86)
W/System.err: at com.android.server.util.ReportTools.isBetaUser(ReportTools.java:73)
W/System.err: at com.android.server.util.ReportTools.report(ReportTools.java:58)
W/System.err: at com.android.server.util.HwUserBehaviourRecord.appExitRecordInnerImpl(HwUserBehaviourRecord.java:125)
W/System.err: at com.android.server.util.HwUserBehaviourRecord.access$200(HwUserBehaviourRecord.java:32)
W/System.err: at com.android.server.util.HwUserBehaviourRecord$AsyUploadLooperThread$1.handleMessage(HwUserBehaviourRecord.java:255)
W/System.err: at android.os.Handler.dispatchMessage(Handler.java:102)
W/System.err: at android.os.Looper.loop(Looper.java:150)
W/System.err: at com.android.server.util.HwUserBehaviourRecord$AsyUploadLooperThread.run(HwUserBehaviourRecord.java:267)
提前感谢您的支持
马蒂亚
答案 0 :(得分:0)
尝试删除runOnUiThread()
方法上的finish()
。如果这是runOnUiThread()
中的所有代码,我认为不需要onScan()
。
public void onScanned(final Barcode barcode) {
Log.i("BARCODE", "Barcode scanned: " + barcode.displayValue)
Toast.makeText(getBaseContext(), "Barcode: " + barcode.displayValue, Toast.LENGTH_LONG).show();
Intent intent=new Intent();
intent.putExtra("displayValue",barcode.displayValue);
setResult(Activity.RESULT_OK, intent);
finish();
}
此外,在您的设备上检查是否在设置中授予了所有权限。
答案 1 :(得分:-1)
尝试使用YourActivity.this.finish而不是完成。
Your_Activity.this.finish();
我希望这有效!