Passing image from one activity another activity

Viewed 71210

There are similar questions on SO, but none worked for me.

I want to fetch clicked image in Activity1 and display it in Activity2.
I'm fetching image id of clicked image like this:

((ImageView) v).getId()

and passing it through intent to another activity.

In 2nd activity, I use image id as following:

imageView.setImageResource(imgId);

I logged the value og image id in both the activities and it's same.

But I'm getting following exception:

android.content.res.Resources$NotFoundException: Resource is not a Drawable 
(color or path): TypedValue{t=0x12/d=0x0 a=2 r=0x7f050000}

I guess the problem here is getId() is returning Id of ImageView and not of it's source image.
All these images are present in drawable.

Any help appreciated.

5 Answers

Define a Drawable static variable in your Application class, and then set image drawable data in the first activity, then in your next activity get data from the static variable you defied in your Application class.

public class G extends Application {
   public static Drawable imageDrawable;

   ...
}

First activity:

G.imageDrawable = imageView.getDrawable();

SecondActivity:

imgCamera.setImageDrawable(G.imageDrawable);

and in onDestroy:

@Override
protected void onDestroy() {
    G.imageDrawable = null;
    super.onDestroy();
}

Note: You have to define your Application class in the manifest:

<application
        android:name=".G"
        ...>

</application>

If you are moving from class like addapter class then use this code.

Bitmap bitImg=listItem.getBitmapImage();
    ByteArrayOutputStream baoS = new ByteArrayOutputStream();
    bitImg.compress(Bitmap.CompressFormat.JPEG, 50, baoS);
    intent.putExtra("bitArray", baoS.toByteArray());
    context.getApplicationContext().startActivity(intent);

and then past this to next activity

if(getIntent().hasExtra("bitArray")) {                
Bitmap bitM = BitmapFactory.decodeByteArray( getIntent().getByteArrayExtra("bitArray"),0,getIntent().getByteArrayExtra("bitArray").length);       
        imgIT = findViewById(R.id.img_detail);
        imgIT.setImageBitmap(bitM);
    }

The perfect way to do this in short. This is the code of sender .class file

Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.ic_launcher;
Intent intent = new Intent();
Intent.setClass(<Sender_Activity>.this, <Receiver_Activity.class);
Intent.putExtra("Bitmap", bitmap);
startActivity(intent);

and this is receiver class file code.

Bitmap bitmap = (Bitmap)this.getIntent().getParcelableExtra("Bitmap");
ImageView viewBitmap = (ImageView)findViewById(R.id.bitmapview);
viewBitmap.setImageBitmap(bitmap);

No need to compress. that's it

Related