WebView loadUrl只能使用一次

编辑:我在这个项目几年前工作,不幸的是我无法validation是否有任何答案在给定的情况下工作。

我有一个WebView应该显示我们的博客很难。 初始化时,它工作得很好。 用户可以导航到WebView中的不同链接。 为了回到博客,WebView外面有一个button,它应该再次加载主博客站点。

问题是,第二次调用loadUrl之后没有任何东西被加载。 这是我的代码:

private WebView wv; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.setContentView(R.layout.blog); wv = (WebView) findViewById(R.id.blog_webview); wv.getSettings().setJavaScriptEnabled(true); wv.setWebViewClient(new WebViewClient() { @Override public void onPageStarted(WebView view, String url, Bitmap favicon { MyLog.logDump("onPageStarted: " + url); } @Override public void onPageFinished(WebView view, String url) { MyLog.logDump("onPageFinished: " + url); } }); wv.loadUrl(Constants.BLOG_URL); } 

我的OnClickListener调用的函数如下:

  public void reLoadUrl() { wv.loadUrl(Constants.BLOG_URL); } 

但尽pipeonPageFinished和onPageStarted中的日志显示我的wv.loadUrl正在被调用,并且它正在加载正确的url,但webview本身的内容不会改变。 我已经尝试清除caching,历史,视图,尝试不同的WebSettings,试图使用webView.goBack() – 不结果。 此外,这些想法不起作用: 在android中奇怪的webview回滚问题

有时,reLoadUrl会显示所需的结果 – 但一旦失败,就不能再重新工作。 任何想法可能发生什么? 我曾尝试阅读WebView代码,但我找不到任何可以帮助我的东西。

我唯一可以补充的是,我们正在使用一些严重依赖于webViews的广告networking – 我试图将这些广告networkingclosures,但是我没有删除这些库,所以我不确定它们是不是罪魁祸首。

有任何想法吗??

Solutions Collecting From Web of "WebView loadUrl只能使用一次"

请按照以下顺序使用。

  wv.clearCache(true); wv.clearView(); wv.reload(); wv.loadUrl("about:blank"); wv.loadData(Constants.BLOG_URL); 

我花了最后一天左右的时间来处理一个使用WebView的应用程序。 我在加载数据到WebView时遇到了一些问题。

我不完全确定这会工作,但也许replace这个代码:

 public void reLoadUrl() { wv.loadUrl(Constants.BLOG_URL); 

}

与此代码:

public void reLoadUrl(){

  wv.clearView(); wv.loadUrl(Constants.BLOG_URL); 

}

也许当你清除WebView将解决问题

我build议你尝试每次使用时重新创buildWebView ,看看是否有任何改变。

首先保存上下文,布局参数和父级。

 Context context = wb.getContext(); ViewGroup.LayoutParams lp = wv.getLayoutParams(); ViewGroup parent = (ViewGroup)wv.getParent(); 

然后停止加载,并从其父母删除视图。

 wv.stopLoading(); parent.removeView(wv); 

然后重新创build并添加回来。

 wv = new WebView(context); parent.addView(wv, lp); 

这可能是其他属性,你需要恢复,但这是一般的想法。

尝试之前加载一个空白页面:

 wv.loadUrl("about:blank"); wv.clearHistory(); wv.clearView(); wv.loadUrl(Constants.BLOG_URL); 

编辑:这是我以前使用的代码,因为我也有这个问题,请尝试。

尝试设置WebChrome客户端。 在某些情况下,webview需要WebChrome Clint支持才能正常工作。

 wv.setWebChromeClient(new WebChromeClient()); 

只要创build一个方法,在其中刷新整个WebView的重新初始化,并从reLoadUrl()调用它。

 void loadWebView() { wv = (WebView) findViewById(R.id.blog_webview); wv.getSettings().setJavaScriptEnabled(true); wv.setWebViewClient(new WebViewClient() { @Override public void onPageStarted(WebView view, String url, Bitmap favicon { MyLog.logDump("onPageStarted: " + url); } @Override public void onPageFinished(WebView view, String url) { MyLog.logDump("onPageFinished: " + url); } }); wv.loadUrl(Constants.BLOG_URL); } public void reLoadUrl() { loadWebView(); } 
 @override public void onFormResubmission(WebView view, Message dontResend, Message resend){ resend.sendToTarget(); } 

我面临同样的问题,并通过以下步骤得到它的工作:

 webView.clearCache(true); webView.loadUrl("Url"); 

我得到了多个URL加载成功。

我面临着同样的问题,最终能够解决这个问题。我对android不熟悉,但是它对我有用。我只是清除从Web视图捕获并销毁并重新创build之前重新加载另一个URL。

 mWebView.clearCache(true); // destroy before reload new url parentView.removeView(mWebView); mWebView.clearHistory(); mWebView.destroy(); 

虽然mWebView.destroy(); 生成错误“java.lang.Throwable:错误:WebView.destroy()调用时仍然附加! 我search它,但没有得到任何解决scheme,许多人说,它不影响应用程序,直到现在(我仍然不知道解决这个NB:我使用WebChromeClient)。

我有同样的问题,调用resumeTimers()解决了我的问题…

onCreate ,而不是使用wv.loadUrl(Constants.BLOG_URL); ,只要使用wv.loadDataWithBaseURL(baseUrl, readFileAsString("index.html") , mimeType, "UTF-8", null);

我面临同样的问题。 我每次都在创build一个新的Webview。 只是先创build一个新的之前破坏以前的webView。 我希望这个帮助! 让你的w​​ebview成为一个全局variables。 喜欢 –

Webview w;

那么在创build一个新的webview之前只需要销毁前一个

  if(null != w) { //destroy the previous webview, before creating the new one w.destroy(); } w= new WebView(activity); 

onPause()调用这个方法

  private void pauseWebView() { try { Class.forName("android.webkit.WebView") .getMethod("onPause", (Class[]) null) .invoke(webview, (Object[]) null); } catch(ClassNotFoundException cnfe) { } catch(NoSuchMethodException nsme) { } catch(InvocationTargetException ite) { } catch (IllegalAccessException iae) { } } 

我面临同样的问题,上述解决scheme都没有为我工作。 所以我通过使用JavaScript重新加载WebView来修复它,如下所示:

 webView.loadUrl( "javascript:window.location.reload( true )" ); 

还需要为WebView启用JavaScript:

 webView.getSettings().setJavaScriptEnabled(true);