2017-08-31 44 views
1

我试图构建一个使用条形码阅读器的android应用程序。Android活动完成方法杀死应用程序

该应用程序的工作流程是如下:

  1. 应用程序开始对在MainActivity按钮上显示
  2. 用户点击“MainActivity”和开始用于条形码扫描
  3. 用户扫描的第二活动条码,结果显示在MainActivity的文本字段中

主要活动以“startActivityForResult”启动条形码扫描活动,并侦听导致事件发生。

条形码扫描活动侦听条形码扫描库的扫描事件并使用“setResult”方法设置结果。

条码扫描活动自行关闭,并让主要活动读取值。

以上所有工作均按预期工作,但在onActivityResult事件处理之后,应用程序终止。

在日志文件中我只能找到一个通用的应用程序杀的消息

下面你可以找到代码段和注销。

主要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中指出:

/** 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) 

预先感谢支持

马蒂亚

+0

你的清单中是否使用了android:noHistory =“true”? –

+0

为什么你在BarcodeActvity中将代码放入runOnUIThread()中?我认为这是造成问题的原因! –

+0

嗨萨钦,我没有这个参数,我目前正在研究它。请查看我编辑的问题。这个错误是否可能与此设置有关?谢谢,Mattia **编辑**条码库发送异步线程中的响应,所以我添加了runOnUiThread,因为那 – Mattiag

回答

0

尝试删除runOnUiThread()在你的finish()方法。如果这是onScan()中的所有代码,我认为不需要runOnUiThread()

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(); 
} 

此外,在您的设备上检查是否在设置中授予所有权限。

+0

嗨Sachin,因为我在我的问题的评论中写道,我使用通知扫描的条码库完成异步线程,这就是为什么我把runOnUIThread。如果我删除该活动不关闭,并没有显示吐司。 – Mattiag

+0

谢谢,我没有看到你的编辑。让我看看这个,谢谢:) –

-1

尝试使用YourActivity.this.finish而不是完成。

Your_Activity.this.finish(); 

我希望这可以工作!

+1

由于'Runnable'接口没有'finish()'方法,因此对'finish()'的调用引用了'Activity'方法。因此,不需要用MainActivity.this.finish()来限定该方法,因为在这种情况下它与调用finish()相同。 – Bryan

相关问题