2013-11-25 26 views
8

Tôi đã làm việc trên một ứng dụng lưu trữ hình ảnh từ web và hiển thị nó ngay cả khi người dùng đang ngoại tuyến. Điều này làm việc khá tốt cho đến khi Android 4.4 xuất hiện. Bây giờ, tất cả những gì tôi thấy là lỗi "Không thể tải trang web". Tôi cho rằng nó có thể phải làm một cái gì đó với thực tế là Kitkat sử dụng Chromium để tải các bản xem trước web, nhưng tôi không chắc lắm. Mọi bản sửa lỗi cho điều này?Bộ nhớ cache WebView không hoạt động trong Android 4.4

Đây là mã của tôi:

mWebView.setLayerType(View.LAYER_TYPE_SOFTWARE, null); 
mWebView.setWebViewClient(new MyWebViewClient()); 

mWebViewSettings = mWebView.getSettings(); 
mWebViewSettings.setJavaScriptEnabled(true); 
mWebViewSettings.setAllowFileAccess(true); 
mWebViewSettings.setAppCacheEnabled(true); 
if (Build.VERSION.SDK_INT < 18) 
    mWebViewSettings.setAppCacheMaxSize(5 * 1024 * 1024); // 5MB 
mWebViewSettings.setLoadsImagesAutomatically(true); 
mWebViewSettings.setAppCachePath(getActivity().getApplicationContext() 
     .getCacheDir().getAbsolutePath()); 
mWebViewSettings.setBuiltInZoomControls(true); 
if(Build.VERSION.SDK_INT<=18) 
    mWebViewSettings.setDefaultZoom((WebSettings.ZoomDensity.FAR)); 
mWebViewSettings.setUseWideViewPort(true); 
mWebViewSettings.setLoadWithOverviewMode(true); 

Tôi tải nó bằng cách sử dụng đoạn mã sau:

if (NetworkUtil.IS_ONLINE_WITH_DATA_CONNECTION) { 

    MyPrefs = getActivity().getSharedPreferences(
      "AHSelectionPreffs", 
        Context.MODE_PRIVATE); 
    Date CAMPUS_MAP_LAST_UPDATE_DATE = new Date(); 
    String CAMPUS_MAP_LAST_UPDATE_DATE_STRING = MyPrefs 
       .getString("CAMPUS_MAP" + String.valueOf(StorageHelper.ID), null); 

    SimpleDateFormat simpleDateFormatter = new SimpleDateFormat(
          "EEE MMM dd HH:mm:ss zzz yyyy", Locale.US); 

    if (CAMPUS_MAP_LAST_UPDATE_DATE_STRING != null) { 
     try { 
      CAMPUS_MAP_LAST_UPDATE_DATE = simpleDateFormatter 
        .parse(CAMPUS_MAP_LAST_UPDATE_DATE_STRING); 

     } catch (ParseException e1) { 

      e1.printStackTrace(); 
      System.out.println("Cant format date!!!!"); 
     } 
     int n = (int) ((curDate.getTime() - CAMPUS_MAP_LAST_UPDATE_DATE 
           .getTime())/(1000 * 60 * 60)); 

     if (n < 24 * UPDATE_DURATION_IN_DAYS) { 
      mWebView.getSettings().setCacheMode(
            WebSettings.LOAD_CACHE_ELSE_NETWORK); 

     } else { 
      updateCampusMapData(); 

     } 
    } else { 

     updateCampusMapData(); 

    } 

} else { 
    mWebView.getSettings().setCacheMode(
        WebSettings.LOAD_CACHE_ELSE_NETWORK); 
} 

if (StorageHelper.campus_map_link.Mobile_Link_URL != null) { 
     mWebView.loadUrl(StorageHelper.campus_map_link.Mobile_Link_URL); 

} 

private void updateCampusMapData() { 
    mWebView.getSettings().setCacheMode(
     WebSettings.LOAD_NO_CACHE); 
    MyPrefs = getActivity().getSharedPreferences(
     "AHSelectionPreffs", Context.MODE_PRIVATE); 
    SharedPreferences.Editor editor = MyPrefs.edit(); 
    editor.putString("CAMPUS_MAP" + String.valueOf(StorageHelper.ID), 
         curDate.toString()); 
    editor.commit(); 

} 
+0

Bạn luôn thấy lỗi (trong trường hợp nào - bạn đang cố gắng tải gì?) Hoặc bạn chỉ nhìn thấy nó ở chế độ ngoại tuyến? Ngoài ra - không liên quan, nhưng tại sao bạn lại đặt loại lớp thành phần mềm? Điều đó thường dẫn đến tình trạng lộn xộn. –

+0

Lỗi xảy ra chỉ khi kết nối internet bị tắt. Và cảm ơn lời khuyên, sẽ cố gắng và thấy sự khác biệt. – rahulritesh

+0

Hãy xem các thay đổi cho Android 4.4 http://developer.android.com/about/versions/android-4.4.html#Behaviors –

Trả lời

3

Got nó giải quyết bản thân mình. Tôi đã phát hiện ra rằng Chromium không lưu vào bộ nhớ cache hình ảnh có kích thước lớn hơn 1 MB. Trong các trường hợp khác, nó hoạt động hoàn toàn tốt. Đã báo cáo điều này với Google, ngay bây giờ.

+0

Bạn có tham chiếu đến lỗi Chromium không? – ksasq

+0

Đối với hồ sơ: Đánh giá theo tên và ngày có vẻ như [vấn đề này] (https://code.google.com/p/android/issues/detail?id=63501), bị đóng do thiếu thông tin. – benebun

0

Có điều này là do các vấn đề sau:

http://code.google.com/p/android/issues/detail?id=63501(! Cần phải được mở cửa trở lại cc Rahulrit)

http://code.google.com/p/chromium/issues/detail?id=240043

Một số Hacks:

1> nếu bạn đang sử dụng máy chủ của riêng mình thay đổi việc triển khai máy chủ web cho MultipartCache sao cho hình ảnh đó bệnh được lưu trữ như một phần một phần, Đây không phải là giải pháp đúng cho nó một thử!

2> Một giải pháp khác là để lưu tất cả các tập tin HTML trong trong lưu trữ như this (không khuyến khích)

// saving page from web to file 
File file = new File(this.getExternalFilesDir(null), "fileName.html"); 
FileUtils.copyURLToFile(new URL("http://www.bmimobile.co.uk/why-bmi.php"), file); 
// loading saved file in webview 
webview.loadUrl("file://" + file.getPath()); 

Credit: Nazar Merza

Lưu ý: Tất cả những giải pháp không phải là 100% giải pháp cho vấn đề trên! chúng ta có thể coi đây là một sửa chữa tạm thời!

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