WebView loadUrl works only once

泪湿孤枕 提交于 2019-11-28 19:19:43

Use exact in below sequence.

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

I have spent the last day or so working on an application that utilised a WebView. I did have a few issues with loading data into the WebView.

I am not entirely sure this would work but perhaps replace this code:

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

}

with this code:

public void reLoadUrl() {

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

}

maybe when you clear the WebView it will solve the issue

I'd suggest you try recreating the WebView every time you use it and see if that makes any difference.

First save context, layout parms and parent.

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

Then stop it loading and remove the view from its parent.

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

Then recreate and add it back.

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

That may be other properties that you'll need to restore, but that's the general idea.

Try to load a blank page before:

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

Edit: This is a code I used before because I had problems with this too, please try it.

Try setting a WebChrome client. The webview needs support of WebChrome Clint to work properly in some cases.

wv.setWebChromeClient(new WebChromeClient());

Just make a method in which you'll flush an reinitialize whole WebView and call it from 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();
}
Nagaraja
@override
public void onFormResubmission(WebView view, Message dontResend, Message resend){
   resend.sendToTarget();
}

I had the same issue, calling resumeTimers() solved the problem for me...

I am facing the same issue and got it working by following steps:

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

and I got the multiple url loaded successfully.

I was facing the same problem and finally able to manage to solve this.I am new to android not sure this good or bad but it works for me.I simply clear catch from web view and destroy and re-create before reloading another url .

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

Though mWebView.destroy(); generate an error "java.lang.Throwable: Error: WebView.destroy() called while still attached!" and i search it but does not get any solution and many say it does not affect application till now(I still does not know solve this N.B: I use WebChromeClient ) .

I was facing the same issue. I was creating a new Webview everytime. Just first destroy your previous webView before creating a new one. I hope this help!! Make your webview a global variable. Like -

Webview w;

then before creating a new webview just destroy the previous one

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

Call this method in 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) {

            }
        }

I faced the same issue and none of the above solution worked for me. So I fixed it by reloading WebView using JavaScript as follows:

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

Also JavaScript needs to be enabled for the WebView:

webView.getSettings().setJavaScriptEnabled(true);
AshuKingSharma

In onCreate, instead of using wv.loadUrl(Constants.BLOG_URL); , just use wv.loadDataWithBaseURL(baseUrl, readFileAsString("index.html") , mimeType, "UTF-8", null);

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!