18

Tôi cần tải và truy xuất trang web HTML trong bộ nhớ trong hoặc bộ nhớ ngoài của thiết bị Android. Những gì tôi cần là tải xuống và truy xuất trang web trong android bằng cách sử dụng chế độ xem web.cách tải hoặc truy xuất trang web ở cả chế độ trực tuyến và ngoại tuyến trong ứng dụng android?

Có nhiều câu hỏi lặp lại tương tự như tải xuống hoặc lưu trang web. Nhưng không có câu trả lời nào giúp tôi. Hướng dẫn tôi!

Xin cảm ơn trước.

+0

Các bạn đã cố gắng thiết lập này viewer.getSettings() setCacheMode (WebSettings.LOAD_DEFAULT) để WebView? – sha

Trả lời

6

Tôi không biết là giải pháp này thích hợp cho your.if bạn muốn xem một trang web trong ẩn mod mod và trực tuyến, bạn có thể sử dụng một trình thu thập web để lấy tất cả dữ liệu từ trang web. Here là một dự án mẫu cho trình thu thập dữ liệu web trên web.au đó bạn có thể tải trang web từ url hoặc bộ nhớ cục bộ dựa trên tình trạng sẵn có trên internet của bạn.

0

A WebView có thể tải và hiển thị remotelocal trang html cộng với trang cũng hỗ trợ 'data' scheme URL.

Storage Options

Preferences Shared (không hữu ích trong trường hợp của bạn)

Lưu trữ dữ liệu nguyên thủy tư nhân trong cặp khóa-giá trị.

lưu trữ nội bộ (Đề nghị cho trường hợp của bạn)

Lưu trữ dữ liệu cá nhân trên bộ nhớ điện thoại.

lưu trữ bên ngoài (Bạn thể sử dụng trong trường hợp bạn nhưng không được khuyến khích)

Lưu trữ dữ liệu công cộng trên bộ nhớ ngoài chia sẻ.

SQLite Cơ sở dữ liệu (Bạn thể sử dụng trong trường hợp bạn nhưng không được khuyến khích)

cửa hàng có cấu trúc dữ liệu trong một cơ sở dữ liệu riêng.

Network Connection (Bạn thể sử dụng trong trường hợp bạn nhưng sẽ không làm việc trong chế độ offline)

Lưu trữ dữ liệu trên web với máy chủ mạng riêng bạn.

0

Bạn có thể muốn thử sử dụng phương pháp shouldInterceptRequest của WebViewClient sử dụng được đặt thành WebView. Nó cho phép bạn biết tất cả các tài nguyên được nạp trong quá trình tải html.Vì vậy, bạn có thể làm một cái gì đó như thế này:

WebViewClient webViewClient = new WebViewClient() { 
    @TargetApi(VERSION_CODES.LOLLIPOP) 
    @Override 
    public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) { 
     WebResourceResponse response = null; 
     if ("GET".equals(request.getMethod())) { 
      try { 
       response = getWebResponse(view.getContext().getApplicationContext(), request.getUrl().toString()); 
      } catch (Exception e) { 
       Log.e(TAG, "Error while overriding getting web response", e); 
      } 
     } 
     return response; 
    } 

    @SuppressWarnings("deprecation") 
    @Override 
    public WebResourceResponse shouldInterceptRequest(WebView view, String url) { 
     WebResourceResponse response = null; 
     try { 
      response = getWebResponse(view.getContext().getApplicationContext(), url); 
     } catch (Exception e) { 
      Log.e(TAG, "Error while overriding getting web response", e); 
     } 
     return response; 
    } 

    WebResourceResponse getWebResponse(Context context, String url) { 
     // YOUR IMPLEMENTATION that will save resource located at passed url 
    } 
} 
webView.setWebViewClient(webViewClient); 
-1

lưu trang web vào bộ nhớ cache;

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 

Kiểm tra liên kết này WebView load website when online, load local file when offline

0

Đ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.

thử này

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); 
} 

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

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

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

Cuối cùng, đừng quên thêm ba điều khoản sau đây để AndroidManifest.xml của bạn:.

<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"/> 
Các vấn đề liên quan