2013-02-03 39 views
58

Tôi thực sự mới lập trình bằng Java nhưng tôi đã thực hiện một số giải pháp cho vấn đề của mình ở đây nhưng không tìm thấy lấy mã xuống đúng.Trang web tải WebView khi trực tuyến, tải tệp cục bộ khi ngoại tuyến

Tôi muốn có một WebView mở trang trực tuyến (ví dụ: Google) khi điện thoại trực tuyến và mở trang HTML cục bộ khi điện thoại ngoại tuyến.

Đồng thời, mặc dù tôi muốn điện thoại ghi đè trang địa phương khi đang trực tuyến để trang địa phương ngoại tuyến luôn được cập nhật lần cuối khi điện thoại được kết nối với internet.

Bất kỳ ý tưởng nào về cách thực hiện việc này? Một số trỏ đơn giản đến đúng hướng có thể hữu ích.

Cảm ơn rất nhiều.

Trả lời

103

Điều đó nghe có vẻ giống như một cơ chế lưu vào bộ nhớ cache webview đơn giản đối với tôi.

Sau đây nên làm những gì bạn đang tìm kiếm:

WebView webView = new WebView(context); 
webView.getSettings().setAppCacheMaxSize(5 * 1024 * 1024); // 5MB 
webView.getSettings().setAppCachePath(getApplicationContext().getCacheDir().getAbsolutePath()); 
webView.getSettings().setAllowFileAccess(true); 
webView.getSettings().setAppCacheEnabled(true); 
webView.getSettings().setJavaScriptEnabled(true); 
webView.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT); // load online by default 

if (!isNetworkAvailable()) { // loading offline 
    webView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); 
} 

webView.loadUrl("http://www.google.com"); 

Phương pháp này isNetworkAvailable() kiểm tra các kết nối mạng đang hoạt động:

private boolean isNetworkAvailable() { 
    ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE); 
    NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo(); 
    return activeNetworkInfo != null && activeNetworkInfo.isConnected(); 
} 

Cuối cùng, đừng quên thêm ba điều khoản sau đây đến số AndroidManifest.xml:

<uses-permission android:name="android.permission.INTERNET"/> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> 
+1

điều này thực sự hoàn chỉnh .. hoạt động như một sự quyến rũ! cảm ơn bạn rất nhiều vì đã cho tôi thấy chế độ bộ nhớ cache – mstation

+0

Đừng lo lắng, vui vì nó đã giúp :) – jenzz

+0

@ jenzz: Tôi có hai vấn đề với giải pháp của bạn. Đầu tiên, trong trường hợp của tôi, tất cả những gì xuất hiện trong bộ đệm ẩn (thẻ sd bên ngoài) là một tệp * trống * có tên là 'ApplicationCache.db'. Không nên lớn hơn ?? Có lẽ bộ nhớ cache đang được lưu trữ ở nơi khác? Thứ hai, điều '.setAppCacheMaxSize()' không được chấp nhận trong API18, không chắc chắn cách thêm nhiều chache nữa ... –

16

h ere là những dịp mà một WebView không thể được lưu trữ một cách tự nhiên. Nếu tiêu đề trang chứa các trường sau, WebView sẽ không thể lưu trữ nội dung từ trang đó. Kiểm soát bộ nhớ cache: không lưu trữ, không có bộ nhớ cache Pragma: no-cache

Trong trường hợp này, bạn sẽ phải sửa đổi thuộc tính trang trên máy chủ để khắc phục sự cố lưu vào bộ nhớ cache.

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