Android 在webview中处理网络问题

Android 在webview中处理网络问题,android,webview,Android,Webview,我正在将google文档中的文档加载到我的webview中。我看到的问题是,当用户启动应用程序且未连接到网络时,会看到以下屏幕: 现在,如果他连接到网络,如何在webview中打开该链接而不重新启动应用程序。在webview中单击该链接是一种选择,但如果出现这种情况,我是否可以提供更好的用户友好方式在webview中重新加载页面?您可以在WebViewClient中捕获网络错误,并显示自己自定义的布局,如下所示: webView.setWebViewClient(new WebV

我正在将google文档中的文档加载到我的webview中。我看到的问题是,当用户启动应用程序且未连接到网络时,会看到以下屏幕:


现在,如果他连接到网络,如何在webview中打开该链接而不重新启动应用程序。在webview中单击该链接是一种选择,但如果出现这种情况,我是否可以提供更好的用户友好方式在webview中重新加载页面?

您可以在WebViewClient中捕获网络错误,并显示自己自定义的布局,如下所示:

       webView.setWebViewClient(new WebViewClient() {

            @Override
            public void onReceivedError(final WebView view, int errorCode, String description,
                    final String failingUrl) {
                //control you layout, show something like a retry button, and 
                //call view.loadUrl(failingUrl) to reload.
                super.onReceivedError(view, errorCode, description, failingUrl);
            }
        });
您可以尝试以下方法:

  • 创建一个导航栏

    e、 g我正在创建一个类似这样的导航栏

     <?xml version="1.0" encoding="utf-8"?>
     <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
      android:layout_width="fill_parent"
      android:layout_height="fill_parent"
      android:orientation="vertical" >
    
    <FrameLayout
     android:id="@+id/wvPlaceHolder"
     android:layout_width="fill_parent"
     android:layout_height="fill_parent" />
    
    
    <RelativeLayout
     android:layout_width="fill_parent"
     android:layout_height="45dp"
     android:layout_alignParentBottom="true"
     android:layout_alignParentLeft="true"
     android:background="@drawable/status_bar" >
    
    <ImageButton
        android:id="@+id/iBback"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:clickable="true"
        android:contentDescription="@string/press_me"
        android:src="@drawable/wg_back" />
    
    <ImageButton
        android:id="@+id/iBrefresh"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/iBback"
        android:layout_centerHorizontal="true"
        android:clickable="true"
        android:contentDescription="@string/press_me"
        android:src="@drawable/wg_refresh" />
    
    <ImageButton
        android:id="@+id/iBforward"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:clickable="true"
        android:contentDescription="@string/press_me"
        android:src="@drawable/wg_forward" />
    </RelativeLayout>
    
    </RelativeLayout>
    
    很简单:)

  • 首先,“网页不可用”是webviewclient在发生错误时抛出的错误页面。设置自定义webviewclient并重写onReceiverError将处理webview将收到的错误

    webView.setWebViewClient(new WebViewClient() {
    
          @Override
          public void onReceivedError(WebView view, int errorCode, String description, String failingUrl)
          {
             //some codes here that you want to do when webview receives an error
          }
        });
    
    其次,您是否为网络连接正确设置了清单?总之,只要加上这三个:

    <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" />
    
  • 添加以下两种方法:

    @凌驾 SaveInstanceState上受保护的无效(束超出状态) { super.onSaveInstanceState(超出状态); wv.保存状态(超出状态); }

  • 第三,在重新加载页面时,我所做的是

  • 重写OnCreateOptions菜单,并为其生成xml。你可以很容易地用谷歌搜索如何做到这一点
  • 充气 getMenuInflater().充气(R.menu.main,menu)
  • 覆盖OnOptionItemSelected并添加项目,也可以轻松地通过谷歌搜索

  • 这里是答案!同时,建议的onReceivedError也被否决。有关可能的解决方案,请参阅。
    <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" />
    
    if(savedInstanceState == null)
    { wv.loadUrl( url here ); }
    
    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState)
    {
        super.onSaveInstanceState(savedInstanceState);
        wv.restoreState(savedInstanceState);
    }