2016-05-31 63 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

哦。非常感谢指出这个主题。所以现在我必须改变我的代码。非常感谢信息。 –