Getting an image into a GridView

  • Replies:0
  • OpenNot stickiedUnanswered
  • Forum posts: 1

Aug 17, 2015 11:46:56 AM via Website

I've been trying to load an image from an SD card and place it into a GridView.

When the images are placed in the drawable folder, they appear fine. But how would I go about including an image loaded by the user from the phone's gallery?

This is the code I'm working on at the moment:

package com.example.jameswhelan.gridview;

public class MainActivity extends Activity {

private static int RESULT_LOAD_IMG = 1;
public int queue=-1;

// String for image name and image URI variables declared in main class, outside any methods.
String imgDecodableString;
Uri selectedImage;

ArrayList<String> itemList = new ArrayList<String>();

Button browseGalleryButton;
TextView tv;

Integer[] imageIDs = {


public void onCreate(Bundle savedInstanceState) {

    browseGalleryButton = (Button)findViewById(;
    tv = (TextView)findViewById(;

    browseGalleryButton.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            Intent galleryIntent = new Intent();
            // Start the Intent

            // Create a new intent called galleryIntent and call the setType() method to all images.
            // Call the putExtra() method and set the EXTA_ALLOW_MULTIPLE flag to true.
            // This *should* allow us to select multiple images from the gallery.
            galleryIntent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
            // Call the setAction() method on the intent to fetch the required data.

            // Finally, call the startActivityForResult() method, passing it the Intent created above.
            startActivityForResult(Intent.createChooser(galleryIntent, "WANG"), 1);


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

    gridView.setOnItemClickListener(new OnItemClickListener()
        public void onItemClick(AdapterView<?> parent,
                                View v, int position, long id)
                    "pic" + (position + 1) + " selected",

// OnActivityResult
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    // Set up a try/catch for selecting images from the gallery.
    try {

        // If an image *is* selected, i.e. we make sure the user has actually selected one.
        if (requestCode == RESULT_LOAD_IMG && resultCode == RESULT_OK
                && null != data) {

            // Set
            queue = 1;

            //Assign the results of data.GetData() to our URI variable, selectedImage.
            selectedImage = data.getData();

            // Set up a string to contain the name of the file in question.
            String[] filePathColumn = { MediaStore.Images.Media.DATA };

            // Get the cursor,
            Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null);

            // Move the cursor to the first row.

            // ???? something to do with a database
            int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
            imgDecodableString = cursor.getString(columnIndex);



        // Stop the "You haven't picked an image!" message on displaying if we hit the back button
        // to return to the Browse Photos screen from the Edit Photos screen.

        else if(queue!=-1) {


        else {

            Toast.makeText(this, "You haven't picked an image!",
    } catch (Exception e) {
        Toast.makeText(this, "Something went wrong!", Toast.LENGTH_LONG).show();

}// end onActivityResult

public class ImageAdapter extends BaseAdapter
    private Context context;

    public ImageAdapter(Context c)
        context = c;

    //---returns the number of images---
    public int getCount() {
        return imageIDs.length;

    //---returns the ID of an item---
    public Object getItem(int position) {
        return position;

    public long getItemId(int position) {
        return position;

    //---returns an ImageView view---
    public View getView(int position, View convertView, ViewGroup parent)
        ImageView imageView;
        if (convertView == null) {
            imageView = new ImageView(context);
            imageView.setLayoutParams(new GridView.LayoutParams(185, 185));
            imageView.setPadding(5, 5, 5, 5);
        } else {
            imageView = (ImageView) convertView;

        Bitmap bm = decodeSampledBitmapFromUri(itemList.get(position), 220, 220);
        return imageView;
}// end image adapter

public Bitmap decodeSampledBitmapFromUri(String path, int reqWidth, int reqHeight) {

    Bitmap bm = null;
    // First decode with inJustDecodeBounds=true to check dimensions
    final BitmapFactory.Options options = new BitmapFactory.Options();
    options.inJustDecodeBounds = true;
    BitmapFactory.decodeFile(path, options);

    // Calculate inSampleSize
    options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);

    // Decode bitmap with inSampleSize set
    options.inJustDecodeBounds = false;
    bm = BitmapFactory.decodeFile(path, options);

    return bm;

public int calculateInSampleSize(

        BitmapFactory.Options options, int reqWidth, int reqHeight) {
    // Raw height and width of image
    final int height = options.outHeight;
    final int width = options.outWidth;
    int inSampleSize = 1;

    if (height > reqHeight || width > reqWidth) {
        if (width > height) {
            inSampleSize = Math.round((float)height / (float)reqHeight);
        } else {
            inSampleSize = Math.round((float)width / (float)reqWidth);

    return inSampleSize;

}// end main activity

The integer array imageIDs was previously populated with image names from the drawable folder so how would I go about including an image loaded from the gallery into the GridView?