2015-10-21 204 views
0

我目前使用的是自定義相機,但是當我選擇從圖庫中選擇一個圖像,然後按回來,然後繼續拍照時,它會在一個空指針上崩潰在mCamera實例中。相機 - > ActivityForResult - >返回按下 - >相機

當我打開畫廊我選擇釋放相機,這個工程。之後,當我按回來時,它會出現在結果的活動中。從那裏我手動調用創建相機所需的所有實例的方法。但是,當調用mCamera.open時,它會給出一個錯誤,我會捕獲它。但是當我想拍照時,它會因爲mCamera爲空而崩潰。

我在這裏做錯了什麼?我釋放相機,以便它能夠獲得新的相機。

編輯:

發佈:

Intent i = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
      startActivityForResult(i, 100); 

     try { 
      mCamera.release(); 
      Log.e("Camera", "Camera has been released"); 
     } catch (NullPointerException E){ 
      E.printStackTrace(); 
     } 

創建:

// Create an instance of Camera 
    mCamera = getCameraInstance(); 

    // Create our Preview view and set it as the content of our activity. 
    mPreview = new CameraPreview(this, mCamera); 
    FrameLayout preview = (FrameLayout) findViewById(R.id.camera_preview); 
    preview.addView(mPreview); 
+0

你能發佈一些代碼,所以我們可以看到你做什麼。 –

+0

我已添加請求的代碼^ 創建的第一行不會成功,因爲它無法打開相機。 –

+1

http://stackoverflow.com/a/19312951/867591 – Ahmed

回答

0

正確的解決方案:

http://www.stackoverflow.com/a/19312951/867591

謝謝艾哈邁德!如果你在onStart方法中打開你的相機,並在你的activity的onStop方法中釋放它,那麼onResume和onPause方法就是android活動的可見生命週期的一部分。活動佔據了整個可見空間,當另一個活動到達前臺時,甚至會調用OnPause,即使它沒有佔用整個可見空間,比如意圖選擇器對話框彈出時的效果,所以我想將你的相機創建和釋放到正確的生命週期方法應該做到這一點,您可以在這裏找到關於活動生命週期的更多信息,但我相信您對此熟悉:

http://developer.android.com/reference/android/app/Activity.html

我做錯了什麼?我實際上是在onResume中完成了所有創建的東西,但是將其切換到onStart可以解決問題。

-1

添加resultCode爲== Activity.RESULT_OK在onActivityResult

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 

    if(resultCode == Activity.RESULT_OK){ 

      //do something if result is ok 
    } 

} 
+0

這不會有所幫助,因爲camera.open是在onResume中執行的。而且我已經有了,但是因爲我從意圖中回過頭來,它會返回不正確的結果。所以它甚至不會進入那裏。 –

+0

你可以在你的問題中添加一些代碼嗎?@JordiSipkens –

+0

不需要它,這個問題在ahmed他的鏈接的幫助下得到了解決。無論如何感謝幫助:) –

0

確保你調用的getCameraInstance()方法onCreate()方法,因爲如果你調用它的onCreate()方法外,相機將不會啓用和將要給你一個空指針異常。

我認爲這link可以幫助你:

相關問題