Select an Image from gallery in ANDROID and show it in an ImageView.

Hi all
In this tutorial I will show you how to get an image from your phone gallery and show it in an imageview.
Here we use intents to open up the image gallery and get the image URI.
Here I am setting the image type as “image” to get only the images.
And on onActivityResult if the result is OK, then get the data using getData() function and converting the imageURI to the stringPath.
Then show the image in the imageview using setImageURI.

package pack.GetImage;

import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;

public class GetImageActivity extends Activity {

	private static final int SELECT_PICTURE = 1;

	private String selectedImagePath;
	private ImageView img;

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

	    img = (ImageView)findViewById(R.id.ImageView01);

	    ((Button) findViewById(R.id.Button01))
	            .setOnClickListener(new OnClickListener() {
	                public void onClick(View arg0) {
	                    Intent intent = new Intent();
	                    intent.setType("image/*");
	                    intent.setAction(Intent.ACTION_GET_CONTENT);
	                    startActivityForResult(Intent.createChooser(intent,"Select Picture"), SELECT_PICTURE);
	                }
	            });
	}

	public void onActivityResult(int requestCode, int resultCode, Intent data) {
	    if (resultCode == RESULT_OK) {
	        if (requestCode == SELECT_PICTURE) {
	            Uri selectedImageUri = data.getData();
	            selectedImagePath = getPath(selectedImageUri);
	            System.out.println("Image Path : " + selectedImagePath);
	            img.setImageURI(selectedImageUri);
	        }
	    }
	}

	public String getPath(Uri uri) {
	    String[] projection = { MediaStore.Images.Media.DATA };
	    Cursor cursor = managedQuery(uri, projection, null, null, null);
	    int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
	    cursor.moveToFirst();
	    return cursor.getString(column_index);
	}
}

Here is the main.xml file


<?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"
    >
<TextView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/hello"
    />
<Button android:text="Browse gallery"
	android:id="@+id/Button01"
	android:layout_width="wrap_content"
	android:layout_height="wrap_content">
</Button>
<ImageView android:id="@+id/ImageView01"
	android:layout_width="wrap_content"
	android:layout_height="wrap_content">
</ImageView>
</LinearLayout>

Please leave your valuable comments if you found this post useful.

40 thoughts on “Select an Image from gallery in ANDROID and show it in an ImageView.”

  1. thank you very much for this tuto…:)))
    but I have a problem with the size of the imageView. It does not take the space I have reserved in xml file.
    can u help me please…

    1. Can’ t really understand the question. I think the problem may be because your image resolution is too small to fit in the provided xml size.

  2. You’re the man! I’ve spent hours trying to figure out why I could not open file based on value returned by data.getPath(). This is in fact because it is not the real file path and I was missing all of the projection & cursor stuff.
    Thanks a lot.
    Remy

  3. Code works perfect, however after selecting a photo if i click my add photo button again and select a different photo the app force closes . Any way to make this work?

  4. Code works great but I am running into this issue.. external allocation too large for this process. Any tutorials on how to implement a down sampling to the images that works with your code above?

  5. When your code is run then give same message un fortunately camera has stopped.
    please help me
    Please reply as soon as possible

    1. Hey vineet, please check the logcat and paste here the reason for this problem. then only I can help, because this is a perfectly working code.

  6. Hi, this works perfectly. But, how if i want to save it into database? can you show me the codes? i’ve spent days on this problems.
    Thanks in advance. Appreciate.

    1. Don’t save the image to the database, but save it to the SDCARD or the application sandbox and save the corresponding path in the database.

  7. Hey this code is pretty cool
    But the only problem I have is
    “The images I take from camera of my application does not display by this image picker”
    Can you help me here?
    Thanx in advance

  8. hi.i have got error in this two line
    1.import android.provider.MediaStore;
    2. private static final int SELECT_PICTURE = 1;
    please help me…

    1. You will get the path of the image just pass it with putExtra to the next activity and show it in the same way. that’s all.

  9. Hi,
    From API 11
    the “managedQuery()” method is depricated
    so does any one have any isea as how the same program can be done for API 11 and above

    Eclipse adiced to use CursorLoader
    but i dont know how to use it

  10. thanks for nice info. :)
    Ngg.. I’m a student and start learn android,
    I tried to use this code to take two different picture from gallery and display it into two different imageview.
    But it can’t work. I just success to display first image, but not for the second.
    Do you know why is it?

  11. Hi, I have used this code to upload a picture in the header of list view in the Side Menu Navigation. It works fine but, when I close the application, the image disappears. Is there any solution for that?

  12. Hey there, i am having the same prob, which say the process has stopped. Cn i check if the ” Cursor cursor = managedQuery(uri, projection, null, null, null);” needs to be deprecated?

  13. Thank you for this tuto, , it works successfully, but i need the same work for an xml file. I mean i want to open and read an xml file. the problem is that i can’t see my file in the galery. Have you any suggestion ??

    1. Gallery is for images and videos only, not for other types of files.
      Install a file explorer app like ES file explorer and there going to right path you can see the XML file.

      I think your question is “you want to select an xml file by opening a file explorer” Isn’t it?
      Then you have to make a file browser or Check in Google for Libraries like that.
      I am sure You will find more than one.

      Thanks

      1. The problem is that when i click to the button to browse my phone contents, i can see only: galerie, contacts, photos and the MP3 player, so how can i access to the other folders.
        Thinks

  14. Hi this code works great, so thank you for that! However I want to be able to select two different images and then use these images for other processing methods. I have tried multiple ways to enhance this code to allow me to do this but haven’t been successful so far. Could you give me any advice on this?

  15. This code is working up to the time the application is entering into gallery but as i select image which is to be displayed in imageview, the application is getting crashed. I dont know where the problem is. this is the logcat that is being generated.

    java.lang.reflect.InvocationTargetException
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:515)
    at android.app.ActivityThread.pauseGC(ActivityThread.java:5525)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2324)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2471)
    at android.app.ActivityThread.access$900(ActivityThread.java:175)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1308)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:146)
    at android.app.ActivityThread.main(ActivityThread.java:5602)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:515)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
    at dalvik.system.NativeStart.main(Native Method)
    Caused by: java.lang.UnsatisfiedLinkError: Native method not found: dalvik.system.VMRuntime.pauseGc:(Ljava/lang/String;)I
    at dalvik.system.VMRuntime.pauseGc(Native Method)
                at java.lang.reflect.Method.invokeNative(Native Method)
                at java.lang.reflect.Method.invoke(Method.java:515)
                at android.app.ActivityThread.pauseGC(ActivityThread.java:5525)
                at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2324)
                at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2471)
                at android.app.ActivityThread.access$900(ActivityThread.java:175)
                at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1308)
                at android.os.Handler.dispatchMessage(Handler.java:102)
                at android.os.Looper.loop(Looper.java:146)
                at android.app.ActivityThread.main(ActivityThread.java:5602)
                at java.lang.reflect.Method.invokeNative(Native Method)
                at java.lang.reflect.Method.invoke(Method.java:515)
                at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283)
                at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
                at dalvik.system.NativeStart.main(Native Method)
    08-13 22:43:10.536 8397-8397/com.collegeproject.prsample D/dalvikvm﹕ GC_FOR_ALLOC freed 80K, 13% free 7696K/8760K, paused 13ms, total 13ms
    08-13 22:43:10.556 8397-8397/com.collegeproject.prsample I/dalvikvm-heap﹕ Grow heap (frag case) to 20.473MB for 12582928-byte allocation
    08-13 22:43:10.566 8397-8406/com.collegeproject.prsample D/dalvikvm﹕ GC_FOR_ALLOC freed <1K, 6% free 19983K/21052K, paused 12ms, total 12ms
    08-13 22:43:11.041 8397-8397/com.collegeproject.prsample D/libEGL﹕ loaded /system/lib/egl/libEGL_mali.so
    08-13 22:43:11.046 8397-8397/com.collegeproject.prsample D/libEGL﹕ loaded /system/lib/egl/libGLESv1_CM_mali.so
    08-13 22:43:11.051 8397-8397/com.collegeproject.prsample D/libEGL﹕ loaded /system/lib/egl/libGLESv2_mali.so
    08-13 22:43:11.056 8397-8397/com.collegeproject.prsample E/﹕ Device driver API match
    Device driver API version: 23
    User space API version: 23
    08-13 22:43:11.056 8397-8397/com.collegeproject.prsample E/﹕ mali: REVISION=Linux-r3p2-01rel3 BUILD_DATE=Fri Mar 21 13:52:50 KST 2014
    08-13 22:43:11.121 8397-8397/com.collegeproject.prsample D/OpenGLRenderer﹕ Enabling debug mode 0
    08-13 22:43:11.126 8397-8397/com.collegeproject.prsample W/ViewRootImpl﹕ Dropping event due to no window focus
    08-13 22:43:11.126 8397-8397/com.collegeproject.prsample W/ViewRootImpl﹕ Dropping event due to no window focus
    08-13 22:43:11.126 8397-8397/com.collegeproject.prsample W/ViewRootImpl﹕ Dropping event due to no window focus
    08-13 22:43:11.126 8397-8397/com.collegeproject.prsample W/ViewRootImpl﹕ Dropping event due to no window focus
    08-13 22:43:11.126 8397-8397/com.collegeproject.prsample W/ViewRootImpl﹕ Dropping event due to no window focus
    08-13 22:43:11.126 8397-8397/com.collegeproject.prsample W/ViewRootImpl﹕ Dropping event due to no window focus
    08-13 22:43:11.126 8397-8397/com.collegeproject.prsample W/ViewRootImpl﹕ Dropping event due to no window focus
    08-13 22:43:39.056 8593-8593/com.collegeproject.prsample I/SELinux﹕ Function: selinux_android_load_priority [0], There is no sepolicy file.
    08-13 22:43:39.081 8593-8593/com.collegeproject.prsample I/SELinux﹕ Function: selinux_android_load_priority , spota verifySig and checkHash pass. priority version is VE=SEPF_GT-N7100_4.4.2_0040
    08-13 22:43:39.081 8593-8593/com.collegeproject.prsample I/SELinux﹕ selinux_android_seapp_context_reload: seapp_contexts file is loaded from /data/security/spota/seapp_contexts
    08-13 22:43:39.081 8593-8593/com.collegeproject.prsample D/dalvikvm﹕ Late-enabling CheckJNI
    08-13 22:43:39.311 8593-8593/com.collegeproject.prsample W/dalvikvm﹕ No implementation found for native Ldalvik/system/VMRuntime;.pauseGc:(Ljava/lang/String;)I
    08-13 22:43:39.316 8593-8593/com.collegeproject.prsample E/ActivityThread﹕ Pause GC
    java.lang.reflect.InvocationTargetException
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:515)
    at android.app.ActivityThread.pauseGC(ActivityThread.java:5525)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2324)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2471)
    at android.app.ActivityThread.access$900(ActivityThread.java:175)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1308)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:146)
    at android.app.ActivityThread.main(ActivityThread.java:5602)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:515)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
    at dalvik.system.NativeStart.main(Native Method)
    Caused by: java.lang.UnsatisfiedLinkError: Native method not found: dalvik.system.VMRuntime.pauseGc:(Ljava/lang/String;)I
    at dalvik.system.VMRuntime.pauseGc(Native Method)
                at java.lang.reflect.Method.invokeNative(Native Method)
                at java.lang.reflect.Method.invoke(Method.java:515)
                at android.app.ActivityThread.pauseGC(ActivityThread.java:5525)
                at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2324)
                at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2471)
                at android.app.ActivityThread.access$900(ActivityThread.java:175)
                at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1308)
                at android.os.Handler.dispatchMessage(Handler.java:102)
                at android.os.Looper.loop(Looper.java:146)
                at android.app.ActivityThread.main(ActivityThread.java:5602)
                at java.lang.reflect.Method.invokeNative(Native Method)
                at java.lang.reflect.Method.invoke(Method.java:515)
                at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283)
                at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
                at dalvik.system.NativeStart.main(Native Method)
    08-13 22:43:39.381 8593-8593/com.collegeproject.prsample D/dalvikvm﹕ GC_FOR_ALLOC freed 103K, 13% free 7722K/8808K, paused 16ms, total 16ms
    08-13 22:43:39.381 8593-8593/com.collegeproject.prsample I/dalvikvm-heap﹕ Grow heap (frag case) to 9.567MB for 1120016-byte allocation
    08-13 22:43:39.406 8593-8602/com.collegeproject.prsample D/dalvikvm﹕ GC_FOR_ALLOC freed 1K, 11% free 8815K/9904K, paused 25ms, total 25ms
    08-13 22:43:39.526 8593-8593/com.collegeproject.prsample D/libEGL﹕ loaded /system/lib/egl/libEGL_mali.so
    08-13 22:43:39.531 8593-8593/com.collegeproject.prsample D/libEGL﹕ loaded /system/lib/egl/libGLESv1_CM_mali.so
    08-13 22:43:39.536 8593-8593/com.collegeproject.prsample D/libEGL﹕ loaded /system/lib/egl/libGLESv2_mali.so
    08-13 22:43:39.546 8593-8593/com.collegeproject.prsample E/﹕ Device driver API match
    Device driver API version: 23
    User space API version: 23
    08-13 22:43:39.546 8593-8593/com.collegeproject.prsample E/﹕ mali: REVISION=Linux-r3p2-01rel3 BUILD_DATE=Fri Mar 21 13:52:50 KST 2014
    08-13 22:43:39.641 8593-8593/com.collegeproject.prsample D/OpenGLRenderer﹕ Enabling debug mode 0

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>