WebView中使用loadURL工作只有一次(WebView loadUrl works only

2019-07-18 03:11发布

编辑:我多年前曾在这个项目上,不幸的是,如果任何的答案在给定的情况下工作,我不能验证。

我有一个的WebView困难时期应该表现出我们的博客。 当initilized,它工作得很好。 用户可以浏览到的WebView中的不同环节。 要返回到博客上,有哪些应该再次载入主要博客网站的网页视图外的按钮。

问题是,没有什么是第二次调用使用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);

}

但是,尽管在onPageFinished和onPageStarted日志显示,我的wv.loadUrl被调用,并且,它的加载正确的URL,在web视图本身的内容不会改变。 我试着清除缓存,历史,视图,尝试了不同的WebSettings,试图用webView.goBack() - 不会导致。 还有那些思想不工作: 奇怪的WebView GoBack的问题在android系统

有时,reLoadUrl显示了预期的结果 - 但一旦失败,它不再能够进行重新工作。 任何想法可能是这样吗? 我曾尝试阅读的WebView代码,但我找不到任何可以帮助我。

我可以补充一点的是,我们使用的是一些广告网络,这都严重依赖于网页视图 - 我试图把那些下来,但让我不知道他们是不是罪魁祸首我没有删除的库。

有任何想法吗??

Answer 1:

在下面的序列精确使用。

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


Answer 2:

我花了近一天左右的工作对使用的web视图的应用程序。 我也有装载数据的几个问题到的WebView。

我不能完全肯定这会工作,但也许将这段代码:

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

}

与此代码:

公共无效reLoadUrl(){

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

}

也许当你清除的WebView它会解决这个问题



Answer 3:

我建议你尝试重新创建WebView每次使用它,看看是否有什么差别的时间。

首先保存上下文,布局PARMS和家长。

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

然后停止加载并从它的父视图。

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

然后重新添加回来。

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

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



Answer 4:

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

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

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



Answer 5:

尝试设置WebChrome客户端。 web视图需要支持WebChrome克林特的在某些情况下正常工作。

wv.setWebChromeClient(new WebChromeClient());


Answer 6:

只是要在其中,你会刷新一个重新初始化整个的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();
}


Answer 7:

@override
public void onFormResubmission(WebView view, Message dontResend, Message resend){
   resend.sendToTarget();
}


Answer 8:

我有同样的问题,要求resumeTimers()解决了这个问题对我来说...



Answer 9:

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

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

和我成功加载了多个网址。



Answer 10:

我正面临同样的问题,终于能够管理解决this.I是新到Android不知道这是好事还是坏事,但它适合我,我只是清楚捕捉从Web视图和破坏并重新加载另一个URL之前重新创建。

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

虽然mWebView.destroy(); 产生错误“的java.lang.Throwable:错误!叫,同时还附WebView.destroy()” 我搜索,但没有得到任何解决方案,很多人说这不会影响应用程序到现在(我仍然不知道解决这个NB:我用WebChromeClient)。



Answer 11:

我面临着同样的问题。 我创建一个新网页视图每次。 创建一个新的人之前只是先摧毁你的web视图以前。 我希望这帮助! 让你的网页流量的全局变量。 喜欢 -

网页流量瓦;

然后创建一个新的WebView之前刚刚摧毁前一

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


Answer 12:

在调用这个方法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) {

            }
        }


Answer 13:

我面临着同样的问题,并没有上述溶液为我工作。 所以我固定它通过使用JavaScript如下重装的WebView:

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

此外JavaScript需要的的WebView启用:

webView.getSettings().setJavaScriptEnabled(true);


Answer 14:

onCreate ,代替使用wv.loadUrl(Constants.BLOG_URL); ,只需使用wv.loadDataWithBaseURL(baseUrl, readFileAsString("index.html") , mimeType, "UTF-8", null);



文章来源: WebView loadUrl works only once