简体   繁体   English

GridView中没有显示图像

[英]no images being displayed in GridView

I am really new to app development and I have been trying to create an image gallery app. 我真的是应用程序开发的新手,我一直在尝试创建图片库应用程序。 But when I click to open the app, nothing is being displayed.I expect it to display images stored on SD card in Gridview. 但是当我单击以打开该应用程序时,没有任何显示。 I have read quite a few questions on SO related to it but they haven't been of much help. 我已经阅读了很多有关SO的问题,但并没有太大帮助。 I can't find anything wrong in my code.Can anyone tell me what is wrong with my code? 我在代码中找不到任何错误,谁能告诉我我的代码有什么问题吗?

imageGallery.java : imageGallery.java

import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.widget.GridView;

import java.io.File;
import java.util.ArrayList;

public class imageGallery extends Activity {

    ArrayList<String> images;

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

        images = new ArrayList<>();// list of file paths
        getFromSdcard();

        GridView gridview = (GridView) findViewById(R.id.gridview);
        gridview.setAdapter(new ImageAdapter(this, images));
    }

    File[] listFile;

    public void getFromSdcard() {
        File file = new File(Environment.getExternalStoragePublicDirectory(
                Environment.DIRECTORY_PICTURES), "InsCam + FixBlur");
        if (listFile != null && listFile.length > 0) {
            for (File file1 : listFile) {

                if (file1.isDirectory()) {

                    listFile = file.listFiles();
                } else {
                    if (file.getName().endsWith(".png")
                            || file.getName().endsWith(".jpg")
                            || file.getName().endsWith(".jpeg")
                            || file.getName().endsWith(".gif")
                            || file.getName().endsWith(".bmp")
                            || file.getName().endsWith(".webp"))


                    {
                        String temp = file1.getPath().substring(0, file1.getPath().lastIndexOf('/'));
                        if (!images.contains(temp))
                            images.add(temp);
                    }
                }
            }
        }
    }
}

ImageAdapter.java : ImageAdapter.java

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;

import java.util.List;

public class ImageAdapter extends BaseAdapter {
    private static final int PADDING = 8;
    private static final int WIDTH = 250;
    private static final int HEIGHT = 250;
    private Context mContext;
    private List<String> mThumbIds;

    public ImageAdapter(Context c, List<String> ids){
        mContext = c;
        this.mThumbIds = ids;
    }

    @Override
    public int getCount() {
        return mThumbIds.size();
    }

    @Override
    public Object getItem(int position) {
        return null;
    }

    // Will get called to provide the ID that
    // is passed to OnItemClickListener.onItemClick()
    @Override
    public long getItemId(int position) {
        return position;
    }

    // create a new ImageView for each item referenced by the Adapter
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        ImageView imageView = (ImageView) convertView;

        // if convertView's not recycled, initialize some attributes
        if (imageView == null) {
            imageView = new ImageView(mContext);
            imageView.setLayoutParams(new GridView.LayoutParams(WIDTH, HEIGHT));
            imageView.setPadding(PADDING, PADDING, PADDING, PADDING);
            imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
        }

        // First decode with inJustDecodeBounds=true to check dimensions
        final BitmapFactory.Options options = new BitmapFactory.Options();
        options.inJustDecodeBounds = true;
        BitmapFactory.decodeFile(mThumbIds.get(position), options);

        // Set inSampleSize
        options.inSampleSize = 4;

        // Decode bitmap with inSampleSize set
        options.inJustDecodeBounds = false;
        Bitmap myBitmap = BitmapFactory.decodeFile(mThumbIds.get(position), options);

        imageView.setImageBitmap(myBitmap);

        return imageView;
    }
}

Your getItem method in adapter returns null that seems to be the issue. 您的适配器中的getItem方法返回的null似乎是问题所在。 You should return string path or bitmap after converting the string path what ever you like as return type is Object. 转换字符串路径后,您应该返回字符串路径或位图,而返回类型是对象。 so I would suggest this. 所以我建议这个。

class ImageAdapter extends BaseAdapter{

  @Override
   public Object getItem(int position) {
        //I have shown string example here.. you can update as per your needs..
       return mThumbIds.get(position);
   }

}

hope this helps.. 希望这可以帮助..

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM