Как правильно загрузить картинку с сервера и кэшировать её на девайсе. Хочется добиться такого же эффекта как в приложении VK, что бы без подключения к сети можно было подгрузить парочку записей.
public class RecipeListAdapter extends BaseAdapter {
LayoutInflater inflater;
ArrayList<Map<String, String>> list;
public RecipeListAdapter(Context context, ArrayList<Map<String, String>> list) {
this.list = list;
inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int i) {
return list.get(i);
}
@Override
public long getItemId(int i) {
return 0;
}
@Override
public View getView(int position, View view, ViewGroup viewGroup) {
View vi = inflater.inflate(R.layout.recipe_list_item, null);
ImageView img = (ImageView) vi.findViewById(R.id.wallpaper);
new LoadImage(img, list.get(position).get("ImageUrl"), list.get(position).get("id")).execute();
return vi;
}
class LoadImage extends AsyncTask<Void, Void, Bitmap> {
private ImageView iv;
private String url;
private String id;
private boolean inCache = false;
public LoadImage(ImageView iv, String url, String id) {
this.iv = iv;
this.url = url;
this.id = id;
}
@Override
protected Bitmap doInBackground(Void... Objects) {
Bitmap bitmap = null;
/*
//Для примера, не знаю как реализовать
bitmap = CacheImages.get(id);
//Если есть в кэше то загрузить из него, иначе загрузить с сервера
if(bitmap != null) {
inCache = true;
return bitmap;
} else {
//Загрузка картинку по урл
// ... код для загрузки, не знаю как реализовать ...
return bitmap;
}
*/
return bitmap;
}
@Override
protected void onPostExecute(Bitmap result) {
if(result != null && iv != null){
//Если нет в кэше, то добавить
if(!inCache) {
//CacheImage.add(id, result);
}
iv.setImageBitmap(result);
}else{
Log.i("Error", "image not uploaded, url: "+url);
}
}
}
}
Правильно ли я пытаюсь это сделать? И как собственно правильно реализовать загрузку и кэширование?