在使用多个活动时从android中的Assets文件夹加载webview中的html时出错

时间:2015-11-27 09:04:18

标签: android android-webview

我的android项目中有两个活动。内容WebView和从资源文件夹加载相同的html(包括一些javascript代码)文件。

当我在第一个活动中加载WebView时,它可以正常工作。但导航到第二个活动后,同样的html文件无法加载到WebView

活动1:

 public class Activity_1 extends AppCompatActivity {

    WebView webView;
    Button button;

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

        webView = (WebView) findViewById(R.id.webview1);
        button = (Button) findViewById(R.id.button1);

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(Activity_1.this, Activity_2.class);
                startActivity(intent);
            }
        });
    }

    @Override
    protected void onResume() {
        super.onResume();

        webView.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
                return true;
            }
        });
        webView.getSettings().setJavaScriptEnabled(true);
        webView.getSettings().setMediaPlaybackRequiresUserGesture(false);
        webView.loadUrl("file:///android_asset/sample.html");
    }

    @Override
    protected void onPause() {
        super.onPause();
    }
}

活动2:

    public class Activity_2 extends AppCompatActivity {

    WebView webView;
    ProgressDialog progressDialog ;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_2);
        webView = (WebView) findViewById(R.id.webview2);

        progressDialog = new ProgressDialog(this);
        progressDialog.setMessage("Loading...");
        progressDialog.setCancelable(true);
        progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
        progressDialog.setProgress(0);

    }

    @Override
    protected void onResume() {
        super.onResume();

        webView.getSettings().setJavaScriptEnabled(true);
        webView.getSettings().setMediaPlaybackRequiresUserGesture(false);

        if (Build.VERSION.SDK_INT >= 19)
            webView.setLayerType(View.LAYER_TYPE_HARDWARE, null);
        else
            webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);

        webView.setWebViewClient(new WebViewClient() {
            @Override
            public void onPageFinished(WebView view, String url) {
                super.onPageFinished(view, url);
                progressDialog.dismiss();
            }
        });

        webView.setWebChromeClient(new WebChromeClient() {
            @Override
            public void onProgressChanged(WebView view, int newProgress) {
                super.onProgressChanged(view, newProgress);
                progressDialog.setProgress(newProgress);
            }
        });

        webView.loadUrl("file:///android_asset/sample.html");
        progressDialog.show();
    }
}

activity_1.xml

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/layout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <WebView
        android:id="@+id/webview1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1"/>

    <Button
        android:id="@+id/button1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Next"
        android:textSize="22sp"/>

</LinearLayout>

activity_2.xml:

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <WebView
        android:id="@+id/webview2"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1" />


</LinearLayout>

当我打开第二个活动时,我被卡住了,

enter image description here

我不明白在第一个Activity中正确加载了相同的html,但在第二个Activity中没有正确加载。

我还尝试在第一项活动中使用明确的WebView缓存,并在活动1的WebView中销毁onDestroy

要加载html,我尝试了以下方法:

webView.loadUrl("file:///android_res/raw/sample.html");

OR

从存储为字符串资源访问html

webView.loadDataWithBaseURL(null, getResources().getString(R.string.html), "text/html", "UTF-8", null);

编辑:

我尝试卸载webview更新并且工作正常。 android 5.0中的webview更新有什么问题吗?

请让我知道我做错了什么?

1 个答案:

答案 0 :(得分:0)

我做了类似的项目来尝试你的代码。这对我有用:S

也许您可以尝试将文件放在src / main / assets中并使用此行

webView.loadUrl( “文件:///android_asset/sample.html”);

但在我的情况下,我正在使用两个选项。 ¿你能提供关于html文件的更多信息吗?