2015-09-15 56 views
0

我知道,這是一個經常討論的話題,但我無法找到:-(Android相機拍攝fileUri.getPath有時空

任何解決方案在我的「捕獲圖像」 - 按鈕我做到以下幾點:

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE); 
intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); 
// start the image capture Intent 
startActivityForResult(intent, CAMERA_CAPTURE_IMAGE_REQUEST_CODE); 

我設置了私人詮釋變量我的類定義後(延伸活動)爲:

public static final int MEDIA_TYPE_IMAGE = 1; 
private static final int CAMERA_CAPTURE_IMAGE_REQUEST_CODE = 100; 

下一步是我的onActivityResult方法:

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    // if the result is capturing Image 
    if (requestCode == CAMERA_CAPTURE_IMAGE_REQUEST_CODE) { 
     if (resultCode == Activity.RESULT_OK) { 
      launchUploadActivity(true); 
    .... 

這裏是我的launchUploadActivity

private void launchUploadActivity(boolean isImage){ 

    System.out.println("Bild: launchUploadActivity"); 

    String filePath = fileUri.getPath(); 
    if (filePath != null) { 
     previewMedia(filePath); 
    } 
} 

這裏是問題!有時候用「fileUri.getPath();」拋出一個空指針 - 異常。我不知道爲什麼它有時會起作用。特別是當我第一次啓動應用程序時,它似乎崩潰了。

感謝您的幫助!

回答

2

您是否已將您的字段fileUri保存並恢復爲onSaveInstanceStateoncreate

我相信錯誤發生在活動重新創建時,因爲您在拍照時切換方向。編號:

@Override 
    public void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    outState.putString("file_uri", fileUri.toString()); 
    } 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    // your code 

    if(savedInstanceState!=null) { 
     fileUri = Uri.parse(savedInstanceState.getString("file_uri")); 
    } 

    } 
+0

謝謝@derek –

+0

歡迎:) –

1

感謝@Derek豐 正是我一直在尋找! :-)

對於所有其他人:這兩種方法是強制性的!

@Override 
protected void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 

    // save file url in bundle as it will be null on screen orientation 
    // changes 
    outState.putParcelable("file_uri", fileUri); 
} 

@Override 
protected void onRestoreInstanceState(Bundle savedInstanceState) { 
    super.onRestoreInstanceState(savedInstanceState); 

    // get the file url 
    fileUri = savedInstanceState.getParcelable("file_uri"); 
}