Miałem metodę, która ładuje obrazy, jeśli obraz nie został załadowany, zanim będzie go szukać na serwerze. Następnie przechowuje je w systemie plików aplikacji. Jeśli jest w systemie plików, ładuje ten obraz, ponieważ jest to znacznie szybsze niż pobieranie obrazów z serwera. Jeśli wcześniej załadowałeś obraz bez zamykania aplikacji, zostanie on zapisany w statycznym słowniku, aby można go było ponownie załadować bez zużywania większej ilości pamięci, aby uniknąć błędów związanych z pamięcią.Pobierz bitmapę z ImageView załadowaną Picasso
To wszystko działało bez zarzutu, dopóki nie zacząłem korzystać z biblioteki ładującej obraz Picasso. Teraz ładuję obrazy do ImageView, ale nie wiem, jak uzyskać zwróconą mapę bitową, aby móc ją zapisać w pliku lub statycznym słowniku. To utrudniło sprawę. ponieważ oznacza to, że próbuje załadować obraz z serwera za każdym razem, co jest czymś, czego nie chcę. Czy istnieje sposób, w jaki mogę uzyskać bitmapę po załadowaniu jej do ImageView? Poniżej znajduje się mój kod:
public Drawable loadImageFromWebOperations(String url,
final String imagePath, ImageView theView, Picasso picasso) {
try {
if (Global.couponBitmaps.get(imagePath) != null) {
scaledHeight = Global.couponBitmaps.get(imagePath).getHeight();
return new BitmapDrawable(getResources(),
Global.couponBitmaps.get(imagePath));
}
File f = new File(getBaseContext().getFilesDir().getPath()
.toString()
+ "/" + imagePath + ".png");
if (f.exists()) {
picasso.load(f).into(theView);
**This line below was my attempt at retrieving the bitmap however
it threw a null pointer exception, I assume this is because it
takes a while for Picasso to add the image to the ImageView**
Bitmap bitmap = ((BitmapDrawable)theView.getDrawable()).getBitmap();
Global.couponBitmaps.put(imagePath, bitmap);
return null;
} else {
picasso.load(url).into(theView);
return null;
}
} catch (OutOfMemoryError e) {
Log.d("Error", "Out of Memory Exception");
e.printStackTrace();
return getResources().getDrawable(R.drawable.default1);
} catch (NullPointerException e) {
Log.d("Error", "Null Pointer Exception");
e.printStackTrace();
return getResources().getDrawable(R.drawable.default1);
}
}
Każda pomoc będzie bardzo ceniona, dziękuję!
Picasso nie będzie ładował obrazów z serwera za każdym razem. Tylko za pierwszym razem ładuje się z katalogu pamięci podręcznej. – intrepidkarthi