[英]Android Activity finish method kills application
我正在尝试构建一个使用条形码阅读器的android应用程序。
该应用程序的工作流程如下:
主要活动使用“ startActivityForResult”启动条形码扫描活动,并监听结果事件。
条形码扫描活动监听条形码扫描库的扫描事件,并使用“ setResult”方法设置结果。
条形码扫描活动将自行关闭,并让主活动读取该值。
以上所有功能均按预期工作,但在onActivityResult事件处理后,应用程序终止。
在日志文件中,我只能找到通用的应用程序终止消息
您可以在下面找到代码段并注销。
Main 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();
}
});
}
最后但并非最不重要的一点是:
/** I/BARCODE: Barcode scanned: 8005200010448
/** I/BARCODE_RESULT: 8005200010448
/** I/BARCODE_RESULT: 8005200010448
/** I/Process: Sending signal. PID: 10012 SIG: 9
*编辑*我刚刚在设备日志中找到以下异常,该异常已在SIG之前抛出:9日志
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)
预先感谢您的支持
马蒂亚
尝试通过finish()
方法删除runOnUiThread()
。 如果这是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();
}
另外,在您的设备上检查是否在设置中授予了所有权限。
尝试使用YourActivity.this.finish而不是finish。
Your_Activity.this.finish();
我希望这行得通!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.