Android ImageAdapter

时间:2012-01-11 15:11:07

标签: android

嗨我可以使用一些帮助来理解扩展baseadapter的imageadapter。我正在上个月我一直在努力的应用程序的homestretch,我很难过。关于我的项目。它跟踪车辆。对于任何车辆,用户可以根据需要使用相机拍摄尽可能多的照片。这部分有效。我可以拍照并将其保存在内部存储空间中。然后我将该路径保存到sqlite表。我的数据库有一个图像ID(_id)ex。 1,车辆id(v_id)ex 1,以及图像的路径(i_image)ex /data/data/com.okc.vinstick/files/img_20120111_090000.jpg。我验证了图像文件并正确保存了数据库条目。现在到了困难的部分:在GridView中显示图像。我试图遵循的ImageAdapter示例是这样的:

    public class ImageAdapter extends BaseAdapter {
    private LayoutInflater mInflater;
    public ArrayList<ImageItem> images = new ArrayList<ImageItem>();

    public ImageAdapter() {
        mInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    public void initialize() {
        images.clear();
        final String[] columns = { MediaStore.Images.Thumbnails._ID };
        final String orderBy = MediaStore.Images.Media._ID;
        Cursor imagecursor = null;
        try {
            ContextWrapper context = MorePhotoTesting.this;
            imagecursor = context.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, columns, null, null, orderBy);
        } catch(Exception e) {
            e.printStackTrace();
        }

        if(imagecursor != null){
            int image_column_index = imagecursor.getColumnIndex(MediaStore.Images.Media._ID);
            int count = imagecursor.getCount();
            for (int i = 0; i < count; i++) {
                imagecursor.moveToPosition(i);
                int id = imagecursor.getInt(image_column_index);
                ImageItem imageItem = new ImageItem();
                imageItem.id = id;
                lastId = id;
                imageItem.img = MediaStore.Images.Thumbnails.getThumbnail(getApplicationContext().getContentResolver(), id,
                        MediaStore.Images.Thumbnails.MICRO_KIND, null);
                images.add(imageItem);
            }
            imagecursor.close();

        }
        notifyDataSetChanged();
    }

我相信一旦我理解了initialize(),我就可以敲除getView()。显然,该示例使用Mediastore,我将使用app内部存储。我迷失了,我的研究空洞了。我只是没有看到如何用我的数据库代码替换Mediastore的东西。如果有人能指出我正确的方向,这将是伟大的!顺便说一下,这个例子使用了一个类:

    class ImageItem {
    boolean selection;
    int id;
    Bitmap img;
}
来自主要活动的电话看起来像这样:

    imageAdapter = new ImageAdapter();
    imageAdapter.initialize();
    imagegrid = (GridView) findViewById(R.id.PhoneImageGrid);
    imagegrid.setAdapter(imageAdapter);

我道歉但这是我处理这些功能的第一个项目。

1 个答案:

答案 0 :(得分:1)

我不完全确定这里是否有特定问题,但我在您的代码中注意到以下行:

imagecursor = context.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, columns, null, null, orderBy);

由于您将图像存储在内部手机存储空间中,因此至少应该使用MediaStore.Images.Media.INTERNAL_CONTENT_URI

我也注意到你正在使用getThumbnail()。这仅适用于存储在SD卡上的内容。