我从我的SQLite数据库中获取存储为BLOB的图像,并使用SimpleCursorAdapter将Cursor设置为Adapter:
public class FragmentAdapter3 extends Fragment {
ArrayList<Sudentdb> list;
GridView gridView;
final String[] from = new String[]{SQLiteHelper._ID,
SQLiteHelper.NAME, SQLiteHelper.AGE, "imagepath"};
final int[] to = new int[]{R.id.rowid, R.id.txtName, R.id.txtAge, R.id.img};
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_main_adapter3, null);
gridView = (GridView) v.findViewById(R.id.gridView);
empty = (TextView) v.findViewById(R.id.esc);
final DBManager dbManager = new DBManager(getActivity());
dbManager.open();
final Cursor cursor = dbManager.fetch();
list = new ArrayList<>();
gridView.setAdapter(new SimpleCursorAdapter(getActivity(), R.layout.single_item, cursor, from, to, 0));
return v;
}
这很好用,我从SQLite获取所有文本和图像,问题是图像加载非常缓慢,这导致我的应用程序在活动之间切换时“滞后”。
我的问题是,我如何使用SimpleCursorAdapter从我的SQLite数据库加载图像,而不会在活动之间切换时导致滞后/加载问题?
编辑:
我知道我可以使用像Piccaso,UniversalImageLoader或Volley这样的库,可以为我处理图像的缓存,但我不知道如何使用上面的String[]
来实现它。
编辑2:
我现在正在保存并获取图像的路径,就像建议的注释一样,但同样的问题也会出现。日志中唯一发生的事情是:
Skipped 43 frames! The application may be doing too much work on its main thread.
这向我表明,即使将保存BLOB更改为保存文件路径,也是导致此问题的图像加载。
答案 0 :(得分:1)
尝试使用Picasso和Glide库,并在数据库存储图像中将varhar作为字符串路径,并使用Bitmap调用android端,以便在活动之间切换时应用程序不会“滞后”
毕加索
Picasso.with(mContext).load(imageFile).priority(Picasso.Priority.HIGH).resize(width, height).into(image);
滑翔
Glide.with(mContext).load(imageFile).override(width, height).into(image);
您可以将图像转换为PNG或JPEG,如下所示:
try {
FileOutputStream out = new FileOutputStream(filename);
bmp.compress(Bitmap.CompressFormat.PNG, 100, out); //100-best quality
out.close();
} catch (Exception e) {
e.printStackTrace();
}