2016-05-31 62 views
2

在我的應用程序,我想點擊相機的照片,並希望從相機中得到內容URI結果onActivityResult()方法。相機意圖調用onDestroy()

在我的應用程序中,我使用下面的方法獲取內容URL。

Uri currImageURI; 
ArrayList<Uri> imageItems = new ArrayList<Uri>(); 
    @Override 
     protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
      // TODO Auto-generated method stub 
      if((requestCode == SELECT_PICTURE_FROM_CAMERA && resultCode == RESULT_OK) || (requestCode == SELECT_PICTURE_FROM_LIB && resultCode == RESULT_OK)) { 
       currImageURI = data.getData(); 
       imageItems.add(currImageURI); 
       Toast.makeText(UpdateMyServiceActivity.this, "Image added.", Toast.LENGTH_LONG).show(); 
      } 
     } 

我添加了uri在ArrayList(因爲用戶可以上傳多個圖像)。

我的應用程序中有保存按鈕。

當用戶點擊保存按鈕,我通過imageItemsAsyncTask上傳圖像到服務器。

但這是問題。

當用戶點擊保存按鈕,我得到imageItems null

我調試我的應用程序。 將URI添加到ArrayList之後,將調用Activity以下的方法。

onResume() 
onPause() 
onStop() 
onDestroy() 
onCreate() 
onStart() 
onResume() 

這就是爲什麼我得到arrayList爲空。

如何解決這個問題?

回答

2
currImageURI = data.getData(); 

如果您使用的是ACTION_IMAGE_CAPTURE,這是不正確的代碼。 ACTION_IMAGE_CAPTURE不會返回Uri,但少數相機應用程序可以。相反,您在ACTION_IMAGE_CAPTUREIntent本身提供EXTRA_OUTPUT。然後,您堅持使用EXTRA_OUTPUT所使用的任何值,然後在onActivityResult()中查找您的圖片。

這就是爲什麼我得到arrayList爲空。

您的活動正在被破壞並重新創建,可能是因爲您的過程在相機應用程序處於前臺時被終止。這很正常。你的程序可以在你的應用程序不在前臺時終止。

如何解決這個問題?

通過保存的實例狀態Bundle保持到ArrayList

+0

每次我從相機意圖獲取URI。示例URI:'content:// media/external/images/media/8484' –

+0

@ChiragSavsani:您不會從任何Nexus設備獲取一個。如果你閱讀文檔,'ACTION_IMAGE_CAPTURE'沒有記錄返回'Uri'。沒有要求相機應用程序返回'Uri'。 – CommonsWare

+0

哦。非常感謝指出這個主題。所以現在我必須改變我的代碼。非常感謝信息。 –