如何将图像数组传递给另一个活动?

时间:2017-10-31 01:56:59

标签: android android-intent android-image

我通过onActivityResult()从图库中获取用户选择的图片,如下所示:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == OPEN_MEDIA_PICKER) {
        // Make sure the request was successful
        if (resultCode == RESULT_OK && data != null) {

            ArrayList<String> selectionResult = data.getStringArrayListExtra("result");


            System.out.println(selectionResult);
        }
    }
}

当我尝试将selectionResult打印到控制台时,它会将每个图像的目录作为字符串打印到控制台。

如何将实际图像存储在数组中并通过意图将它们发送到下一个活动?

3 个答案:

答案 0 :(得分:2)

您只需创建Bitmap数组然后使用URI生成Bitmap并放入Array然后将Array传递给Adapter。

ArrayList<Bitmap> bitmaps =new ArrayList<>();

然后

Uri uri = data.getData();

Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(),uri);

bitmaps .add(bitmap );

然后通知适配器。

答案 1 :(得分:1)

兄弟,将图像的位图数据从一个活动发送到另一个活动是不好的方法,因为位图对象大多数都很大。因此outOfMemory问题可能会生成,并且您的应用程序将因此outOfMemory而崩溃。所以你应该使用图像控制器而不是位图数据。我的意思是您将图像路径(图像目录)从一个活动发送到其他活动。您通过意图从一个活动向另一个活动发送图像路径的ArrayList对象。因为它是可序列化的,并且字符串格式数据不大。

答案 2 :(得分:1)

您可以在arraylist中添加文件路径,如:

  arraylist.add(file.getAbsolutePath());
  adapter.notifyDataSetChanged();

然后在新的Activity中发送arraylist并在新的活动中获取图像表单文件,如:

    FileInputStream streamIn = null;
    try {
        streamIn = new FileInputStream(new File(arraylist.get(position)));
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
    Bitmap bitmap = BitmapFactory.decodeStream(streamIn); //This gets the image
    custom_imageView.setImageBitmap(bitmap);