8

当我使用备份和恢复 Webview 状态时,我收到此消息:x 地址处的网页可能暂时关闭或可能已永久移动到新网址。

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
    super.onSaveInstanceState(savedInstanceState);
    webViewShowPoll.saveState(savedInstanceState);                                    
}

@Override
public void onRestoreInstanceState(Bundle outState) {
  super.onRestoreInstanceState(outState);
    webViewShowPoll.restoreState(outState);
}

和 Androidmanifest.xml

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


    <activity
        android:name="com.omid.epoll.mobile.Poll"
        android:launchMode="singleInstance"
        android:label="@string/title_activity_poll" 
        android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen">
    </activity>
4

4 回答 4

2
 if (isInternetPresent) {
        // Internet Connection is Present
        // make HTTP requests
        // showAlertDialog(HomeScreen.this, "Internet Connection",
        // "You have internet connection", true);

        webviewbrowse.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);
        webviewAds.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);
        webviewbrowse.loadUrl("http://www.example.com");
    } else {
        // Internet connection is not present
        // Ask user to connect to Internet
        webviewbrowse.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
        webviewAds.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
        webviewbrowse.loadUrl("http://example.com");
        showAlertDialog(HomeScreen.this, "internet doesn't connect",
                " please connect to internet", false);
    }
于 2013-08-28T06:19:46.233 回答
2

restoreState从不可靠。这也许就是文档现在这么说的原因。

如果在此 WebView 有机会建立状态(加载页面、创建后退/前进列表等)之后调用它,则可能会产生不良副作用。请注意,此方法不再恢复此 WebView 的显示数据。

saveState() 的相应条目是这样说的:

请注意,此方法不再存储此 WebView 的显示数据。

在 onCreate 方法中你真正应该做的是调用 webView.loadUrl() 如果你想显示最后访问的 url,请看这个答案

如果您担心 webview 在方向更改等时重新加载。

你可以设置你的活动来处理方向和键盘隐藏的变化,然后只留下 WebView

于 2015-09-30T12:28:49.843 回答
-1
     binding.webView.setWebViewClient(new WebViewClient() {
         public boolean shouldOverrideUrlLoading(WebView view, String url) {
             view.loadUrl(url);
             return true;
         }

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

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

    binding.webView.getSettings().setJavaScriptEnabled(true);
    binding.webView.getSettings().setBuiltInZoomControls(true);
    binding.webView.getSettings().setDisplayZoomControls(false);
    binding.webView.getSettings().setAppCacheMaxSize( 5 * 1024 * 1024 );
    binding.webView.getSettings().setAppCachePath( getActivity().getApplicationContext().getCacheDir().getAbsolutePath() );
    binding.webView.getSettings().setAllowFileAccess( true );
    binding.webView.getSettings().setAppCacheEnabled( true );
    binding.webView.getSettings().setCacheMode( WebSettings.LOAD_DEFAULT );
    if ( !ConnectivityStatus.Companion.isConnected(getContext()) ) { // loading offline
        binding.webView.getSettings().setCacheMode( WebSettings.LOAD_CACHE_ELSE_NETWORK );
    }
    binding.webView.loadUrl(this.url);
于 2020-02-25T07:15:24.433 回答
-2

如果您的 WebView 在 Fragment 中,请检查以下内容:

保存:

@Override
public void onSaveInstanceState(Bundle outState) {
    webView.saveState(outState); // output would be a WebBackForwardList
}

您可以查看文档以了解 saveState。

恢复:

@Override
public void onCreate(Bundle savedInstanceState) {
    ...

    if (savedInstanceState != null) {
        webView.restoreState(savedInstanceState);
    } else {
        webView.loadUrl("http://mypage");
    }
}
于 2016-08-22T09:59:30.613 回答