安卓Webview中的loadUrl()失败,显示net::ERR_CACHE_MISS错误。

4

我正在使用Android Studio开发。在主活动中,我使用了WebView。当我运行项目时,它会显示错误信息:"The webpage at http://www.google.com could not be loaded because: net::ERR_CACHE_MISS"。 以下是我的代码: 在清单文件中:

<application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".defaultActivity"
            android:label="@string/app_name"
          >
            <uses-permission android:name="android.permission.INTERNET"/>
            <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
            <uses-permission android:name="android.permission.android.permission.ACCESS_NETWORK_STATE"/>
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

在 Activity 中:

WebView _taskOrganizerView = null;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_default);
        _taskOrganizerView =   (WebView)findViewById(R.id.wvTskOrg);
        _taskOrganizerView.getSettings().setJavaScriptEnabled(true);
        if (Build.VERSION.SDK_INT >= 19) {
            _taskOrganizerView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
        }
        _taskOrganizerView.loadUrl("http://www.google.com");
        _taskOrganizerView.setWebViewClient(new WebViewClient() );
    }

在布局中:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".defaultActivity">

    <WebView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/wvTskOrg"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />

</RelativeLayout>

1
请确保在您的清单文件中添加了 <uses-permission android:name="android.permission.INTERNET"/> - Haseeb Zulfiqar
我遇到了这个问题,但它只是最近才在一个长期运行且未更改的应用程序上出现。 - Michael
5个回答

6
今天我遇到了同样的问题,最终我发现我只是忘记在AndroidManifest.xml文件中添加权限声明。在我添加后一切都正常了。
<uses-permission android:name="android.permission.INTERNET"/>

在AndroidManifest.xml文件中。

2
在Android清单文件中的应用程序标签之外使用Internet权限。

2

从上面的代码看,您似乎正在尝试在<application>标签中设置权限。

正如@zehata在此答案中所述,权限应该在清单文件中<application>标签外授予。将其放在开头,因为位置似乎也很重要。 尝试像这样:

<manifest>

<uses-permission android:name="android.permission.INTERNET" />

<application>

...

    <manifest package="your.awesome.package"
          xmlns:android="http://schemas.android.com/apk/res/android"
          xmlns:tools="http://schemas.android.com/tools">

        <uses-permission android:name="android.permission.INTERNET"/>
        <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
        <uses-permission android:name="android.permission.android.permission.ACCESS_NETWORK_STATE"/>

        <application
            android:allowBackup="true"
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name"
            android:theme="@style/AppTheme" >
            <activity
                android:name=".defaultActivity"
                android:label="@string/app_name">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
        </application>

        <!-- more content of manifest file -->

   </manifest>

1

据我所知,WebView 的默认缓存行为是在遵守网页缓存策略的同时使用缓存。如果根本不设置缓存模式,仍然会使用缓存,但只有当页面允许时才会使用。 - kris larson

1

你的代码:

if (Build.VERSION.SDK_INT >= 19) {
            _taskOrganizerView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
        }

如果您从未加载“http://www.google.com”,设置缓存模式为LOAD_CACHE_ELSE_NETWORK会出现错误,您可以:
webview.setWebViewClient(new WebViewClient() {

            @Override
            public void onReceivedError(WebView view, int errorCode,
                    String description, String failingUrl) {
                super.onReceivedError(view, errorCode, description, failingUrl);
                //setWebView Gone
            }

            @Override
            public void onPageStarted(WebView view, String url, Bitmap favicon) {
                super.onPageStarted(view, url, favicon);

            }

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


            }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接