Tôi có một phương thức tải hình ảnh, nếu hình ảnh chưa được tải trước khi nó sẽ tìm kiếm trên máy chủ. Sau đó, nó lưu trữ nó trong hệ thống tập tin ứng dụng. Nếu nó nằm trong hệ thống tệp, nó sẽ tải hình ảnh đó thay vì nó nhanh hơn nhiều so với việc kéo hình ảnh từ máy chủ. Nếu bạn đã tải hình ảnh trước đó mà không đóng ứng dụng, nó sẽ được lưu trữ trong một từ điển tĩnh để nó có thể được tải lại mà không cần sử dụng nhiều bộ nhớ hơn, để tránh lỗi bộ nhớ.Nhận bitmap từ ImageView được tải bằng Picasso
Tất cả đều hoạt động tốt cho đến khi tôi bắt đầu sử dụng thư viện tải hình ảnh Picasso. Bây giờ tôi đang tải hình ảnh vào một ImageView nhưng tôi không biết làm thế nào để có được Bitmap được trả về để tôi có thể lưu trữ nó trong một tập tin hoặc từ điển tĩnh. Điều này khiến mọi việc trở nên khó khăn hơn. bởi vì nó có nghĩa là nó cố gắng tải hình ảnh từ máy chủ mỗi lần, đó là điều tôi không muốn xảy ra. Có cách nào tôi có thể nhận được Bitmap sau khi tải nó vào ImageView? Dưới đây là mã của tôi:
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);
}
}
Bất kỳ trợ giúp nào sẽ được đánh giá cao, cảm ơn bạn!
Picasso sẽ không tải hình ảnh từ Máy chủ mỗi lần. Chỉ vào lần đầu tiên sau đó nó tải từ thư mục bộ nhớ cache. – intrepidkarthi