嗨我可以使用一些帮助来理解扩展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);
我道歉但这是我处理这些功能的第一个项目。
答案 0 :(得分:1)
我不完全确定这里是否有特定问题,但我在您的代码中注意到以下行:
imagecursor = context.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, columns, null, null, orderBy);
由于您将图像存储在内部手机存储空间中,因此至少应该使用MediaStore.Images.Media.INTERNAL_CONTENT_URI
。
我也注意到你正在使用getThumbnail()
。这仅适用于存储在SD卡上的内容。