2010-01-13 24 views
11

Tôi hiện đang phát triển một ứng dụng Android tìm nạp hình ảnh bằng cách sử dụng các yêu cầu http. Nó sẽ là khá sưng lên nếu tôi có thể cache những hình ảnh để cải thiện hiệu suất và sử dụng băng thông.Cách sử dụng CacheManager của Android?

Tôi đã xem qua lớp CacheManager trong tài liệu tham khảo Android, nhưng tôi thực sự không biết cách sử dụng nó, hoặc những gì nó thực sự làm.

Tôi đã scoped qua ví dụ này, nhưng tôi cần một số giúp hiểu nó:

/core/java/android/webkit/gears/ApacheHttpRequestAndroid.java

Ngoài ra, các quốc gia tham khảo:

"Yêu cầu mạng được cung cấp cho thành phần này và nếu chúng không thể được giải quyết bằng bộ nhớ cache, các tiêu đề HTTP được đính kèm, nếu thích hợp, với yêu cầu xác nhận lại nội dung. "

Tôi không chắc điều này có ý nghĩa gì hoặc nó hoạt động như thế nào, vì getCacheFile của CacheManager chỉ chấp nhận URL chuỗi và Bản đồ chứa tiêu đề. Không chắc chắn những gì các tập tin đính kèm được đề cập có nghĩa là.

Một lời giải thích hoặc một ví dụ mã đơn giản sẽ thực sự làm cho ngày của tôi. Cảm ơn!

Cập nhật

Dưới đây là những gì tôi có ngay bây giờ. Tôi rõ ràng làm sai, chỉ không biết ở đâu.

 
public static Bitmap getRemoteImage(String imageUrl) { 
     URL aURL = null; 
     URLConnection conn = null; 
     Bitmap bmp = null; 

     CacheResult cache_result = CacheManager.getCacheFile(imageUrl, new HashMap()); 

     if (cache_result == null) { 
      try { 
       aURL = new URL(imageUrl); 
       conn = aURL.openConnection(); 
       conn.connect(); 
       InputStream is = conn.getInputStream(); 

       cache_result = new CacheManager.CacheResult(); 
       copyStream(is, cache_result.getOutputStream()); 
       CacheManager.saveCacheFile(imageUrl, cache_result); 
      } catch (Exception e) { 
       return null; 
      } 
     } 

     bmp = BitmapFactory.decodeStream(cache_result.getInputStream()); 
     return bmp; 
    } 
+0

bạn gặp phải lỗi nào với mã này? – Janusz

+0

E/AndroidRuntime (3097): LOẠI TRỪ CHẤT LƯỢNG: chính E/AndroidRuntime (3097): java.lang.NullPointerException E/AndroidRuntime (3097): tại android.webkit.CacheManager.saveCacheFile (CacheManager.java:459) là những gì tôi nhận được khi cố gắng lưu vào bộ nhớ cache, đã thêm tiền thưởng nếu có thể tôi muốn biết cách thực hiện. E/AndroidRuntime (3097): tại android.webkit.CacheManager.saveCacheFile (CacheManager.java:453) – HaMMeReD

Trả lời

10

Tôi không nghĩ rằng CacheManger thể được sử dụng bên ngoài của một WebView như đã nêu trong báo cáo lỗi này http://code.google.com/p/android/issues/detail?id=7222

+0

Đúng vậy .. Tôi đã gặp vấn đề tương tự và sau hai ngày đấu tranh tôi đã đọc báo cáo lỗi đó :) –

+1

Nếu bạn là tìm kiếm bộ nhớ đệm yêu cầu HTTP trên android thì một tùy chọn là volley: http://stackoverflow.com/questions/tagged/android-volley –

1

Tôi đã xem qua vấn đề này một lúc trước là tốt. Trình quản lý bộ nhớ cache chỉ dành cho webview và không thực sự hữu ích ngoài điều đó. Đối với ứng dụng của tôi, tôi cần phải cache các câu trả lời và hình ảnh xml, vì vậy cuối cùng tôi đã viết trình quản lý bộ nhớ cache của riêng mình để thực hiện điều đó. Không có gì quá khủng khiếp nhưng chắc chắn không dễ như sử dụng một cái được xây dựng sẵn.

Nếu bạn có bất kỳ câu hỏi nào về thông tin cụ thể, hãy thêm nhận xét vào bài đăng của tôi, tôi thường xuyên kiểm tra lại.

+0

Bạn có thể cung cấp thêm chi tiết về việc triển khai không? – sabbour

+0

@sabbour bạn muốn biết điều gì? Về cơ bản tôi đã mở một dòng http và viết nó vào một tập tin. Khi ứng dụng của tôi truy cập vào tệp đó, nó đã kiểm tra tuổi của tệp, nếu nó quá cũ, nó sẽ xóa nó để ứng dụng của tôi biết tải xuống một bản sao mới. – smith324

Các vấn đề liên quan