Java 将webview自动保存到本地存储

Java 将webview自动保存到本地存储,java,android,performance,webview,download,Java,Android,Performance,Webview,Download,Webview每次打开时都会加载,当我第一次打开Webview文件时,是否有任何方式将其保存在本地存储中,当我再次打开Webview文件时,它们不需要下载。意味着即使没有互联网,他们也会打开 这是我的java文件。我们有什么办法可以完成这项任务吗 package com.example.impwala; import android.app.ProgressDialog; import android.content.DialogInterface; import android.graphi

Webview每次打开时都会加载,当我第一次打开Webview文件时,是否有任何方式将其保存在本地存储中,当我再次打开Webview文件时,它们不需要下载。意味着即使没有互联网,他们也会打开

这是我的java文件。我们有什么办法可以完成这项任务吗

package com.example.impwala;

import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.graphics.Bitmap;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.webkit.WebView;
import android.webkit.WebViewClient;

import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;



public class chemistry1 extends AppCompatActivity {

    WebView chem1;
    ProgressDialog pDialog;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_chemistry1);

        if (haveNetwork())
        {
            init();
            listener();
        }
        else if (!haveNetwork())
        {
            AlertDialog.Builder builder =new AlertDialog.Builder(this);
            builder.setTitle("No internet Connection");
            builder.setMessage("Please turn on internet connection to continue");
            builder.setNegativeButton("close", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    dialog.dismiss();
                }
            });
            AlertDialog alertDialog = builder.create();
            alertDialog.show();        }

    }

    public boolean haveNetwork()
    {
        boolean have_WIFI=false;
        boolean have_MobileData=false;

        ConnectivityManager connectivityManager=(ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
        NetworkInfo[] networkInfos=connectivityManager.getAllNetworkInfo();

        for (NetworkInfo info:networkInfos)
        {
            if (info.getTypeName().equalsIgnoreCase("WIFI"))
                if(info.isConnected())
                    have_WIFI=true;
            if (info.getTypeName().equalsIgnoreCase("MOBILE"))
                if(info.isConnected())
                    have_MobileData=true;
        }
        return have_MobileData||have_WIFI;
    }
    private void init() {

        chem1 = (WebView) findViewById(R.id.chem1);
        chem1.getSettings().setJavaScriptEnabled(true);

        pDialog = new ProgressDialog(chemistry1.this);
        pDialog.setTitle("PDF");
        pDialog.setMessage("Loading...");
        pDialog.setIndeterminate(false);
        pDialog.setCancelable(false);
        chem1.loadUrl("www.example.com");

    }


    private void listener() {
        chem1.setWebViewClient(new WebViewClient() {
            @Override
            public void onPageStarted(WebView view, String url, Bitmap favicon) {
                super.onPageStarted(view, url, favicon);
                pDialog.show();
            }

            @Override
            public void onPageFinished(WebView view, String url) {
                super.onPageFinished(view, url);
                pDialog.dismiss();
            }
        });
    }
}


将您的网页另存为web存档,保存到公共文档文件夹中的SD卡存储中,如下所示:

File file;
String filenameExternal = "mypage";
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED{
         file = new File(Environment.getExternalStoragePublicDirectory(
            Environment.DIRECTORY_DOCUMENTS), filenameExternal);
}

chem1.saveWebArchive(file.toString()+".mht");
然后,当用户通过覆盖
@OnStop
方法离开应用程序时,使用共享首选项保存文件名/路径。 最后,当用户重新打开应用程序时,通过从共享首选项读取文件路径来加载保存的页面

if (Build.VERSION.SDK_INT >= VERSION_CODES.KITKAT) {
                    chem1.loadUrl(file.toString()+".mht");
                } else {

                    loadOfflinePageBelowKitKat(position);
                } 
loadOfflinePageBelowKitKat方法

public void loadOfflinePageBelowKitKat(){

    String rawData = null;
    try{
        rawData = getStringFromFile(file.toString()+".mht");
    }catch (Exception e){
        e.printStackTrace();
    }

    chem1.loadDataWithBaseURL(null, rawData, "application/x-webarchive-xml", "UTF-8", null);

}
getStringFromFile方法

public String getStringFromFile(String filePath) throws Exception{
    File file = new File(filePath);
    FileInputStream fInputStream = new FileInputStream(file);
    String wantedString = convertStreamToString(fInputStream);
    fInputStream.close();
    return  wantedString;
}

我假设您熟悉共享首选项和文件

实际上我不熟悉共享偏好和文件,我是一个新手!使用共享首选项非常容易。检查此链接,以及如何将文件保存到本地存储或从本地存储读取文件检查此链接我无法理解此链接,请告诉我将代码放在何处,这将很有帮助。我已更新了答案,包括如何将网页保存到外部存储,请检查!您应该将变量声明为成员变量
private File;私有字符串fileNameExternal=“mypage”
则if语句必须位于
onCreate()方法内部。最后调用
chem1.saveWebArchive(file.toString()+“.mht”)
onStop()
方法中。我对getExternalStorageState做了一些输入,它应该是getExternalStorageState。