WebView loadUrl работает только один раз

EDIT: Я работал над этим проектом много лет назад, и, к сожалению, я не могу проверить, работает ли какой-либо из ответов в данном сценарии.

Мне нелегко работать с одним WebView, который должен показывать наш блог. Когда он инициализирован, он работает отлично. Пользователь может перемещаться по различным ссылкам в WebView. Чтобы вернуться в блог, есть кнопка за пределами 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); } 

Но, несмотря на то, что журналы inPageFinished и onPageStarted показывают, что мой wv.loadUrl вызывается и что он загружает правильный URL-адрес, контент в самом веб-браузере не изменяется. Я попытался очистить кеш, историю, представление, попробовал разные WebSettings, попытался использовать webView.goBack () – не результат. Кроме того, эти идеи не работают: Странная проблема с веб-браузером goBack в android

Иногда reLoadUrl показывает желаемый результат – но как только он терпит неудачу, его больше нельзя заставить работать снова. Любые идеи, что может произойти? Я попытался прочитать код WebView, но я не мог найти ничего, что могло бы мне помочь.

Единственное, что я могу добавить, это то, что мы используем некоторые рекламные сети, которые сильно зависят от webViews – я попытался отключить их, но я не удалял библиотеки, поэтому я не уверен, что они не являются виновниками.

Есть идеи??

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.

Я не совсем уверен, что это сработает, но, возможно, заменит этот код:

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

}

С этим кодом:

Public void reLoadUrl () {

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

}

Возможно, когда вы очистите WebView, он решит проблему

Я предлагаю вам попробовать воссоздать WebView каждый раз, когда вы его используете, и посмотреть, не имеет значения.

Сначала сохраните контекст, макеты макетов и родителя.

 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); 

Это могут быть другие свойства, которые вам нужно восстановить, но это общая идея.

Попробуйте загрузить пустую страницу:

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

Edit: Это код, который я использовал раньше, потому что у меня были проблемы с этим, попробуйте.

Попробуйте настроить клиента WebChrome. Веб-просмотр нуждается в поддержке WebChrome Clint для правильной работы в некоторых случаях.

 wv.setWebChromeClient(new WebChromeClient()); 

Просто создайте метод, в котором вы очистите повторный инициализацию всего 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, не уверен, что это хорошо или плохо, но он работает для меня. Я просто очищаю catch от веб-представления и уничтожаю и воссоздаю перед перезагрузкой другого 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).

У меня была такая же проблема, вызвав resumeTimers () решил проблему для меня …

В onCreate вместо использования wv.loadUrl(Constants.BLOG_URL); , Просто используйте wv.loadDataWithBaseURL(baseUrl, readFileAsString("index.html") , mimeType, "UTF-8", null);

Я столкнулся с той же проблемой. Я каждый раз создавал новый Webview. Просто сначала уничтожьте свой предыдущий webView перед созданием нового. Надеюсь, эта помощь! Сделайте свой веб-просмотр глобальной переменной. Подобно –

Webview w;

То перед созданием нового 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) { } } 

Я столкнулся с той же проблемой, и ни одно из вышеперечисленных решений не помогло мне. Поэтому я исправил его, перезагрузив WebView с помощью JavaScript следующим образом:

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

Также для WebView необходимо включить JavaScript:

 webView.getSettings().setJavaScriptEnabled(true);