如何在Android中的活动之间传递图像?

时间:2015-12-16 18:22:23

标签: android android-intent

我想点击Activity 1带图片的按钮,以显示Activity 2的图片,但它无效。

活动1:

Intent intent = new Intent(MainActivity.this, Main2Activity.class);
// Bundle bundle = new Bundle();
Drawable drawable=img1.getDrawable();
Bitmap bitmap= ((BitmapDrawable)drawable).getBitmap();

ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos);
byte[] b = baos.toByteArray();

intent.putExtra("picture", b);
// String ten = edt.getText().toString();
// bundle.putString("tenkh", ten);
// intent.putExtras(bundle);

startActivity(intent);

活动2:

ImageView image = (ImageView) findViewById(R.id.img2);
TextView txtTen= (TextView) findViewById(R.id.tv1);
Intent goiIntent=getIntent();
Bundle extras = goiIntent.getExtras();
byte[] b = extras.getByteArray("picture");
Bitmap bmp = BitmapFactory.decodeByteArray(b, 0, b.length);
image.setImageBitmap(bmp);

2 个答案:

答案 0 :(得分:1)

您应该向我们展示帮助我们理解问题的逻辑。

但是,我认为你的问题是byte []很难通过意图。

一种解决方法可能是使用类型为byte[]的公共静态字段的抽象类。在广播您的意图之前,请在您的数据中设置此字段,并在下一个活动中读取此数据,并且不要忘记在不需要时将字段设置为null以避免内存泄漏。< /强>

创建一个类ImageHelper,如下所示:

public abstract class ImageHelper {
    public static byte [] image;
}

在您的活动1中,在启动意图之前,而不是intent.putExtra("picture", b);使用ImageHelper.image = b;

然后在您的活动2中,使用byte[] b = extras.getByteArray("picture");而不是byte[] b = ImageHelper.image;

答案 1 :(得分:-1)

Activity 1
intent.putExtra("BitmapImage", bitmap);

Activity 2
Intent intent = getIntent();
Bitmap bitmap = (Bitmap) intent.getParcelableExtra("BitmapImage");
ImageView image = (ImageView) findViewById(R.id.img2);
image.setImageBitmap(bitmap);