2017-08-31 75 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

相關問題