【问题标题】:loadUrl() in Android Webview fails with net::ERR_CACHE_MISSAndroid Webview 中的 loadUrl() 因 net::ERR_CACHE_MISS 而失败
【发布时间】:2015-12-18 22:24:12
【问题描述】:

我在 android studio 工作。我在主要活动中使用了 webview。当我运行我的项目时,它会给出一个错误,例如......“http://www.google.com 的网页无法加载,因为: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>

活动中:

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>

【问题讨论】:

  • 确保您在清单文件中添加了&lt;uses-permission android:name="android.permission.INTERNET"/&gt;

标签: android webview


【解决方案1】:

我今天遇到同样的问题,最后我发现我只是忘记在 AndroidManifest.xml 文件中添加权限声明。添加后一切正常

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

在 AndroidManifest.xml 中

【讨论】:

    【解决方案2】:

    在 android manifest 文件的应用程序标签之外使用 Internet 权限。

    【讨论】:

      【解决方案3】:

      从上面的代码看来,您正在尝试在&lt;application&gt;-tag 中设置权限。

      正如this answer 中的@zehata 所说,权限应该在清单文件中的&lt;application&gt;-tag 之外授予。把它放在开头,因为这个地方似乎也很重要。 试试这样的:

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

      【讨论】:

        【解决方案4】:

        你可能是这个错误的受害者:

        Issue 424599: Failed to load resource: net::ERR_CACHE_MISS error when opening DevTools on PHP pages

        这似乎发生在具有Cache-Control 响应标头的页面上

        【讨论】:

        • 据我了解,WebView的默认缓存行为是在尊重网页缓存策略的同时使用缓存。根本不设置缓存模式仍然会使用缓存,但只有当页面说没问题时。
        【解决方案5】:

        你的代码:

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

        如果你从不加载“http://www.google.com”,你设置的CacheMode 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);
        
        
                    }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-08-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多