Это приложение с видом галереи. Использование REST Я получаю (Volley) JSON, который содержит информацию о месте и нескольких ссылках на фотографии. Потому что существует около 60 мест, поэтому недостаточно кэшировать форму PICASSO. Данные хранятся в БД, поэтому я решил включить изображение в базу данных как byte stream
. Это сделано, но не так хорошо, как показано ниже. Код внутри AsyncTask
.Подход к изображениям для Android в БД
@Override
protected Bitmap doInBackground(Void... params) {
try {
return Picasso.with(context)
.load(site.getImageURL())
.get();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Bitmap bitmap) {
super.onPostExecute(bitmap);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
try {
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream);
} catch (Exception e) {
e.printStackTrace();
}
site.setImageBytes(stream.toByteArray());
db.openForWrite();
db.updateSite(site.getId(), site);
db.close();
}
Вопрос: как сделать его эффективным, знаете ли вы, как лучше это сделать? Я попробовал callback
Пикассо, чтобы добавить изображение в БД onSuccess
, но для этого требуется представление в качестве первого аргумента.
Возможно, есть хороший способ сохранить изображения на SD-карте и заменить ссылку HTTP на местоположение изображения на SD-карте.
Или кэширование изображения непосредственно на диск?
Использование кеша. Если у вас больше изображений, вам необходимо использовать Disk Cache –
. Я бы предложил загрузить и сохранить изображение на SDCard и сохранить этот путь в db и проверить, существуют ли они, если не скачать тот, который присутствует на SDCard – sector11