java - 相机 Intent 调用 onDestroy()

标签 java android android-camera-intent

在我的应用程序中,我想单击相机中的照片,并希望在 onActivityResult() 方法中从相机结果获取内容 URI

在我的应用程序中,我使用以下方法获取内容 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();
            }
        }

我在ArrayList中添加了uri(因为用户可以上传多个图像)。

我的应用程序中有保存按钮。

当用户单击“保存”按钮时,我将 imageItems 传递给 AsyncTask 以将图像上传到服务器。

但问题来了。

当用户单击“保存”按钮时,我得到imageItems null

我调试我的应用程序。 将 URI 添加到 ArrayList 后,将调用以下 Activity 方法。

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

这就是为什么我得到 arrayList null 的原因。

如何解决这个问题?

最佳答案

currImageURI = data.getData();

如果您使用的是ACTION_IMAGE_CAPTURE,则这是错误的代码。 ACTION_IMAGE_CAPTURE 不会返回 Uri,但少数相机应用会返回。相反,您可以在 ACTION_IMAGE_CAPTURE Intent 本身上提供 EXTRA_OUTPUT。然后,您保留与 EXTRA_OUTPUT 使用的任何值,并在 onActivityResult() 中查找图像。

That's why I am getting arrayList null.

您的 Activity 正在被销毁并重新创建,可能是因为您的进程在相机应用程序位于前台时被终止。这是完全正常的。只要您的应用程序不在前台,您的进程就可以随时终止。

How to solve this issue?

通过保存的实例状态 Bundle 保留 ArrayList

关于java - 相机 Intent 调用 onDestroy(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37546330/

相关文章:

android - 奇怪的内存泄漏

android - 三星 s3 在捕获图像后不会将图像数据返回到 URI,而在所有其他设备上,它工作正常

java - 无法获取捕获的图像 uri

android - 当 EditText 处于焦点时无法在 RecyclerView 上通知 DataSetChanged

Android 8.1 在调用 startActivityForResult() 时关闭 Activity

java - rdd.checkpoint 在 spark 作业中被跳过

java - 如何将对象保存到文件中,以便稍后加载?

java - 带有外部 JAR 的 Spring Boot 获取 NoClassDefFoundError

java - maven看不到本地安装的jar

android - 在 Android 元数据中指定十六进制颜色值