11

I have to transfer the image from one activity to another. In first activity the user selects the image out of several images from scroll view and that image has to be displayed in the imageview of next activity. Help required.

Peter O.
  • 32,158
  • 14
  • 82
  • 96
Arslan Ali Khan
  • 121
  • 1
  • 1
  • 7
  • 3
    passing the bitmap from one Activity to another is a bad idea. you should consider passing the path or URI. – minhaz Nov 05 '12 at 05:50

9 Answers9

9

In your first Activity

Convert ImageView to Bitmap

    imageView.buildDrawingCache();
    Bitmap bitmap = imageView.getDrawingCache();

    Intent intent = new Intent(this, NewActivity.class);
    intent.putExtra("BitmapImage", bitmap);

In second Activity

     Bitmap bitmap = (Bitmap) intent.getParcelableExtra("BitmapImage");

Then display bitmap in ImageView.

Note: this is not recommended. Should actually save the image somewhere and pass the path instead and retrieve from second activity.

Raghunandan
  • 132,755
  • 26
  • 225
  • 256
  • 2
    It doesnot work beacuse it gives error over putExtra command and I have to transfer the image of the image view which has id "imageview" to image view of next activity which has id "images". – Arslan Ali Khan Nov 05 '12 at 05:25
  • thanks @Raghunandan:i had searched a lot for this question,none of them helped,your answer worked for me at last..thank you – Akash Shah Mar 11 '13 at 13:44
4

You can do this with many way. simple is with intent. but it may hang your device and it also give you out of memory Exception in many device like Galaxy S3.

so i ll give you very simple way see below.

you can create static variable in one class like :

public class ABC{

public static Bitmap PHOTO = null;

}

now when you get bitmap from gallery or any other way then you have to save bitmap in this PHOTO variable.(this is possible in only onActivityResult, am i right?)

if you get photo from camera then code is.

Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, CAMERA_PIC_REQUEST);

and,

@Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (resultCode == Activity.RESULT_OK) {

            switch (requestCode) {
                case CAMERA_PIC_REQUEST:
                    Bitmap b = (Bitmap) data.getExtras().get("data");
                    if (b != null) {
                        ABC.PHOTO = b;
                    }
                    break;
}
}

and use this PHOTO variable in any other Activity.

you can use this same way when pick photo from gallery.


hi this is edited ans.

this is just sample example of grid view. here you get idea about how pass image from one activity to another.

this is your main Activity class:

package com.GridViewDemo;

import java.io.InputStream;
import java.net.URL;
import java.util.GregorianCalendar;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;

public class GridViewDemoActivity extends Activity {
    /** Called when the activity is first created. */

    // String[] mArr =
    // {"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"};
    String[] mArr = {
            "http://www.xda-developers.com/wp-content/uploads/2012/10/androidfigure.jpg?f39ce1",
            "http://1.bp.blogspot.com/-Ramp-o0Cp8s/T0VafXkE4uI/AAAAAAAAAQU/i703zg5MBgI/s1600/android-wallpaper5_1024x768.jpg",
            "http://www.thebiblescholar.com/android_awesome.jpg",
            "http://blogs-images.forbes.com/rogerkay/files/2011/07/Android1.jpg" };

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        GridView gridView = (GridView) findViewById(R.id.gridView1);
        gridView.setAdapter(new ImageAdapter(this));

        gridView.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                    long arg3) {
                // TODO Auto-generated method stub

                /** if you have bitmap here then you can use this way
                 * Bitmap bitmap = getBitmap();
                 * test.PHOTO = bitmap; 
                 * 
                 * */
                Intent i = new Intent(GridViewDemoActivity.this, newActiivty.class);
                i.putExtra("Image_Path", ""+mArr[arg2]);
                startActivity(i);
            }
        });
    }

    public class ImageAdapter extends BaseAdapter {

        private Context mContext;

        public ImageAdapter(Context c) {
            mContext = c;
        }

        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            return mArr.length;
        }

        @Override
        public Object getItem(int arg0) {
            // TODO Auto-generated method stub
            return null;
        }

        @Override
        public long getItemId(int position) {
            // TODO Auto-generated method stub
            return 0;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            // TODO Auto-generated method stub
            ImageView imgView;
            if (convertView == null) {
                imgView = new ImageView(mContext);
                imgView.setLayoutParams(new GridView.LayoutParams(85, 85));
                imgView.setScaleType(ImageView.ScaleType.CENTER_CROP);
                imgView.setPadding(8, 8, 8, 8);
            } else {
                imgView = (ImageView) convertView;
            }

            Drawable d = LoadImageFromWebOperations(mArr[position]);
            if (d == null) {
                imgView.setImageResource(R.drawable.icon);
            } else {
                imgView.setImageDrawable(d);
            }
            return imgView;
        }

    }

    public static Drawable LoadImageFromWebOperations(String url) {
        try {
            InputStream is = (InputStream) new URL(url).getContent();
            Drawable d = Drawable.createFromStream(is, "src name");
            return d;
        } catch (Exception e) {
            return null;
        }
    }
}

main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <GridView android:id="@+id/gridView1" android:layout_height="wrap_content"
        android:layout_width="fill_parent" android:numColumns="4"></GridView>
</LinearLayout>

newActivity.class

package com.GridViewDemo;

import java.io.InputStream;
import java.net.URL;

import android.app.Activity;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.widget.ImageView;

public class newActiivty extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.new_layout);

        String image_path = getIntent().getStringExtra("Image_Path");

        ImageView imageview = (ImageView) findViewById(R.id.imageView1);

        Drawable d = LoadImageFromWebOperations(image_path);
        if (d != null) {
            imageview.setImageDrawable(d);
        } else {
            imageview.setImageResource(R.drawable.icon);
        }



        /** if you have bitmap then
         * imageview.setImageBitmap(test.PHOTO);
         * */
    }

    public static Drawable LoadImageFromWebOperations(String url) {
        try {
            InputStream is = (InputStream) new URL(url).getContent();
            Drawable d = Drawable.createFromStream(is, "src name");
            return d;
        } catch (Exception e) {
            return null;
        }
    }

}

new_layout.xml

<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout android:id="@+id/linearLayout1"
    android:layout_width="fill_parent" android:layout_height="fill_parent"
    xmlns:android="http://schemas.android.com/apk/res/android">
    <ImageView android:src="@drawable/icon" android:id="@+id/imageView1"
        android:layout_width="fill_parent" android:layout_height="320dp"></ImageView>
</LinearLayout>

manifest file

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.GridViewDemo"
      android:versionCode="1"
      android:versionName="1.0">
    <uses-sdk android:minSdkVersion="3" />
    <uses-permission android:name="android.permission.INTERNET"></uses-permission>

    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".GridViewDemoActivity"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".newActiivty"></activity>

    </application>
</manifest>

this is extra class: if you have bitmap then use this way:

package com.GridViewDemo;

import android.graphics.Bitmap;

public class test {

    public static Bitmap PHOTO = null;

}

i comment in code so, check it and if you have query then comment below this ans.

Dhaval Parmar
  • 18,812
  • 8
  • 82
  • 177
  • Here is the code of function which is called when user presses ok button in first activity public void ok(View view) { Intent intent = new Intent(this, Data.class); EditText editText = (EditText) findViewById(R.id.text); String message = editText.getText().toString(); intent.putExtra(EXTRA_MESSAGE, message); startActivity(intent); Intent intent1 = new Intent(Template.this,Data.class); ImageView image= (ImageView) findViewById(R.id.imageview); intent1.putExtra("bmp",image); startActivity(intent); } – Arslan Ali Khan Nov 05 '12 at 05:36
  • this is wrong. put your all code in your question. you are passing imageView. you have to pass bitmap or path of image, whatever you are using to show images in scrollview. – Dhaval Parmar Nov 05 '12 at 05:40
  • I have to pas the image of the imageview in first activity whose id is imageview kindly suggest the code – Arslan Ali Khan Nov 05 '12 at 06:04
  • Dhaval uncle please guide 14 mins are over :p – Arslan Ali Khan Nov 05 '12 at 06:31
  • thanks alot dhaval we'll further contact you if we face some problem – Arslan Ali Khan Nov 05 '12 at 07:38
  • We have used iimages from drawable folder which we have named as d,e,f so how to use them and send them to next actvity because your code take images from internet – Arslan Ali Khan Nov 05 '12 at 07:54
  • Uncle please guide me why are you not replying soon please get back to work and send me the code – Arslan Ali Khan Nov 05 '12 at 08:14
  • then you have to do same way. mean you have an Array? for drawable folder? use that array in this code : gridView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView> arg0, View arg1, int arg2, long arg3) { // TODO Auto-generated method stub Intent i = new Intent(GridViewDemoActivity.this, newActiivty.class); i.putExtra("Image_Path", ""+array_of_drawable[arg2]); startActivity(i); } }); – Dhaval Parmar Nov 05 '12 at 08:38
  • basically we want to show the imageview with id "image0" we want to display it on next activity kindly update that how to send the value of image0 to next imageview with id "images" – Arslan Ali Khan Nov 05 '12 at 09:55
  • this is very simple Arslan. you have to send image name?? or give me you all code. i cant understand you what you want. – Dhaval Parmar Nov 05 '12 at 12:34
  • Dhavar uncle now we want to save the photo into phone's gallery kindly help – Arslan Ali Khan Nov 07 '12 at 08:32
  • this static content way is the best way I think. Other answers will cause memory issue! – Noor Hossain Jun 01 '22 at 10:07
2

in first Activity first Make Sure you instantiate the bitmap at the top like Bitmap bitmap;

and then use this :- in the first Activity

ByteArrayOutputStream bs = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, bs);
byte[] byteArray = bs.toByteArray();
intent.putExtra("PICTURE", byteArray);
startActivity(intent);

and in the second activity:-

byte[] byteArray = extras.getByteArray("PICTURE");
bitmap = BitmapFactory.decodeByteArray(byteArray,0,byteArray.length);
imgViewResult.setImageBitmap(bitmap);
Axel
  • 3,331
  • 11
  • 35
  • 58
GouravGupta
  • 143
  • 2
  • 5
  • this is getting error and application will crash if the parcel size exceed limit (1mb) . The error is : !!! FAILED BINDER TRANSACTION !!! – Noor Hossain Jun 01 '22 at 10:03
1

You can pass the URI of the Image to next Activity.

the URI which you get from onActivityResult()

and in onCreate() of the next Activity.

Decode the Bitmap again and set it to ImageView

Devangi Desai
  • 1,355
  • 12
  • 17
0

See this post.

Use putExtra in first activity when you start second Activity. And in second Activity use getExtra() as follow:

In First Activity

Intent intent = new Intent(Activity1.this,Activity2.class);
intent.putExtra("bmp",selectedImage);
startActivity(intent);

In Second Activity

Bitmap bmp = this.getIntent().getParcelableExtra("bmp");
Community
  • 1
  • 1
Android Boy
  • 4,335
  • 6
  • 30
  • 58
  • then use ByteArrayOutputStream bs = new ByteArrayOutputStream(); b.compress(Bitmap.CompressFormat.PNG, 50, bs); before putExtras(). – Android Boy Nov 05 '12 at 06:23
0

Convert your image in base64 string format and pass it to the next activty and again decode it to the bitmap.

URAndroid
  • 6,177
  • 6
  • 30
  • 40
0

In first Activity :

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if(requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK){
        Intent showImageIntent = new Intent(this, ShowCameraPicture.class);
        showImageIntent.fillIn(data,Intent.FILL_IN_DATA);
        startActivity(showImageIntent);
    }
}

In second Activity :

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Bundle bundle = getIntent().getExtras();
    if(bundle!=null){
        Bitmap image = (Bitmap)bundle.get("data");
        //do whatever you need to do with the bitmap here ...
    }       
}       
R.U
  • 1
  • 4
0

//////////firstActivity.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.app.myapp.com.app44sendinginfofromoneactivitytoanother.MainActivity">

    <RelativeLayout
        android:layout_width="368dp"
        android:layout_height="495dp"
        tools:layout_editor_absoluteX="8dp"
        tools:layout_editor_absoluteY="8dp">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_centerHorizontal="true"
            android:layout_centerVertical="true"
            android:orientation="vertical">

            <EditText
                android:id="@+id/edtName"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:ems="10"
                android:hint="Enter NAme"
                android:inputType="textPersonName" />

            <EditText
                android:id="@+id/edtLastName"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:ems="10"
                android:hint="Enter LastName"
                android:inputType="textPersonName" />

            <EditText
                android:id="@+id/edtEmail"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:ems="10"
                android:hint="Enter Email"
                android:inputType="textPersonName" />

            <EditText
                android:id="@+id/edtPassword"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:ems="10"
                android:hint="Enter Password"
                android:inputType="textPassword" />

            <ImageView
                android:id="@+id/imgView"
                android:layout_width="match_parent"
                android:layout_height="200dp"
                app:srcCompat="@android:drawable/ic_menu_report_image" />

            <RadioGroup
                android:id="@+id/rdoGroup"
                android:layout_width="match_parent"
                android:layout_height="50dp">

                <RadioButton
                    android:id="@+id/rdoMale"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:text="Male" />

                <RadioButton
                    android:id="@+id/rdoFemale"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:text="Female" />
            </RadioGroup>

            <Button
                android:id="@+id/btnSend"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="10dp"
                android:text="Send" />
        </LinearLayout>
    </RelativeLayout>

</android.support.constraint.ConstraintLayout>

////////////// MainActivity.java

    public class MainActivity extends AppCompatActivity implements View.OnClickListener,CompoundButton.OnCheckedChangeListener{

    EditText edtName,edtLastName,edtEmail,edtPassword;
    ImageView imgView;
    RadioButton rdoMale,rdoFemale;
    Button btnSend;
    String genderType = "";
    int CAMERA_PIC_REQUEST = 99;
    Bitmap bitmap; // your bitmap

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        edtName = (EditText) findViewById(R.id.edtName);
        edtLastName = (EditText) findViewById(R.id.edtLastName);
        edtEmail = (EditText) findViewById(R.id.edtEmail);
        edtPassword = (EditText) findViewById(R.id.edtPassword);
        btnSend = (Button) findViewById(R.id.btnSend);
        imgView = (ImageView) findViewById(R.id.imgView);
        rdoMale = (RadioButton) findViewById(R.id.rdoMale);
        rdoFemale = (RadioButton) findViewById(R.id.rdoFemale);
        btnSend.setOnClickListener(MainActivity.this);
        imgView.setOnClickListener(MainActivity.this);
        rdoMale.setOnCheckedChangeListener(MainActivity.this);
        rdoFemale.setOnCheckedChangeListener(MainActivity.this);

    }


    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        switch (buttonView.getId()){
            case R.id.rdoMale:
                if (isChecked){
                    genderType = "Male";
                }else{

                    buttonView.setChecked(false);
                }

                break;
            case R.id.rdoFemale:
                if (isChecked){
                    genderType = "Female";
                }else{

                    buttonView.setChecked(false);
                }
                break;
        }
    }

    @Override
    public void onClick(View v) {
        switch(v.getId()){
            case R.id.btnSend:

                    Intent intent = new Intent(MainActivity.this,SecondActivity.class);
                    intent.putExtra("NAME",edtName.getText().toString());
                    intent.putExtra("LASTNAME",edtLastName.getText().toString());
                    intent.putExtra("EMAIL",edtEmail.getText().toString());
                    intent.putExtra("PASSWORD",edtPassword.getText().toString());
                    intent.putExtra("GENDER",genderType);

                     //below is the code which you are looking for 

              -->    ByteArrayOutputStream bs = new ByteArrayOutputStream();
              -->    bitmap.compress(Bitmap.CompressFormat.PNG, 100, bs);
                     byte[] byteArray = bs.toByteArray();
                     intent.putExtra("PICTURE", byteArray);
                     startActivity(intent);
            break;
            case R.id.imgView:
                Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
                startActivityForResult(cameraIntent, CAMERA_PIC_REQUEST);
                break;
        }
    }



    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode,resultCode,data);
        if (requestCode == CAMERA_PIC_REQUEST) {
            bitmap = (Bitmap) data.getExtras().get("data");
            imgView.setImageBitmap(bitmap);

        }
    }

}

//////////////////// SecondActivity.xml

    <?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.app.myapp.com.app44sendinginfofromoneactivitytoanother.ResultActivity">

    <RelativeLayout
        android:layout_width="368dp"
        android:layout_height="495dp"
        tools:layout_editor_absoluteX="8dp"
        tools:layout_editor_absoluteY="8dp">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_centerHorizontal="true"
            android:layout_centerVertical="true"
            android:orientation="vertical">

            <TextView
                android:id="@+id/txtName"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="10dp"
                android:text="FirstName:"
                android:textSize="24sp" />

            <TextView
                android:id="@+id/txtLast"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="10dp"
                android:text="LastName:"
                android:textSize="24sp" />

            <TextView
                android:id="@+id/txtEmail"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="10dp"
                android:text="Email:"
                android:textSize="24sp" />

            <TextView
                android:id="@+id/txtPassword"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="10dp"
                android:text="Password:"
                android:textSize="24sp" />

            <TextView
                android:id="@+id/txtGender"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="10dp"
                android:text="Gender:"
                android:textSize="24sp" />

            <ImageView
                android:id="@+id/imgViewResult"
                android:layout_width="match_parent"
                android:layout_height="200dp"
                app:srcCompat="@android:drawable/ic_menu_report_image" />

        </LinearLayout>
    </RelativeLayout>
</android.support.constraint.ConstraintLayout>

///////// SecondActivity.Java

    public class SecondActivity extends AppCompatActivity {

    Context ctx ;
    TextView txtName,txtLast,txtEmail,txtPassword,txtGender;
    ImageView imgViewResult;
    Bitmap bitmap;

    @Override
    protected void onCreate(Bundle bundle) {
        super.onCreate(bundle);
        ctx = this;
        setContentView(R.layout.activity_result);

        txtName = (TextView) findViewById(R.id.txtName);
        txtLast = (TextView) findViewById(R.id.txtLast);
        txtEmail = (TextView) findViewById(R.id.txtEmail);
        txtPassword = (TextView) findViewById(R.id.txtPassword);
        txtGender = (TextView) findViewById(R.id.txtGender);
        imgViewResult = (ImageView) findViewById(R.id.imgViewResult);

        Bundle extras = getIntent().getExtras();
        String Name = extras.getString("NAME");
        String LastName = extras.getString("LASTNAME");
        String Email = extras.getString("EMAIL");
        String Password = extras.getString("PASSWORD");
        String Gender = extras.getString("GENDER");

        txtName.setText("Name: "+Name);
        txtLast.setText("LastName: "+LastName);
        txtEmail.setText("Email: "+Email);
        txtPassword.setText("Password: "+Password);
        txtGender.setText("Gender: "+Gender);

        byte[] byteArray = extras.getByteArray("PICTURE");
        bitmap = BitmapFactory.decodeByteArray(byteArray,0,byteArray.length);
        imgViewResult.setImageBitmap(bitmap);


   }

}

HappyCoding :)

GouravGupta
  • 143
  • 2
  • 5
0

First Activity:

Intent intent = new Intent(CurrentActivity, secondActivity.class);

intent.putExtra("resId", R.drawable.your image);
startActivity(intent);

Then your Target Activity:

Bundle bundle = getIntent().getExtras();

if(bundle!=null){
    int image = bundle.getInt("resId");
    ImageId.setImageResource(image);
}
0xdb
  • 3,539
  • 1
  • 21
  • 37