Android WebView - 1 ° LoadData () funziona bene, le chiamate successive non aggiornano visualizzazione

StackOverflow https://stackoverflow.com/questions/4096783

  •  28-09-2019
  •  | 
  •  

Domanda

Dopo la prima chiamata a LoadData () l'evento onLoadResource incendi come dovrebbe e il display va bene. Successivo voglio aggiornare la schermata con una nuova pagina, quando uso LoadData () la seconda volta che la pagina non si aggiorna e onLoadResource () non si attiva.

Poi seconda chiamata a LoadData () onlyfires onPageFinished ... onPageStarted mai fuochi!

Un lavoro intorno è stato quello di chiamare .reload () dopo LoadData (), ma che causa problemi di ogni genere durante l'altra logica nell'attività.

Perché non LoadData () lavoro più volte?

Sto usando estremamente semplice HTML, e dal momento che utilizzando .reload () lo fa funzionare la mia () dichiarazione LoadData non sembra essere il problema.

Tutte le idee sarebbero utili, TIA

È stato utile?

Soluzione

Usa

webview.loadDataWithBaseURL("same://ur/l/tat/does/not/work", "data", "text/html", "utf-8", null);

funziona benissimo. loaddata non aggiorna la prossima volta i dati sono caricati.

Altri suggerimenti

Per qualche ragione si deve cancellare il contenuto prima. Il "load ..." metodi non sembrano essere in modo esplicito aggiungendo il loro contenuto, ma non funziona. Penso che è usato per essere WebView.clearView(), ma che è stata sconsigliata. Il doc per il metodo deprecato sul sito Android realtà ti dice di usare WebView.loadUrl("about:blank") in sostituzione di quel metodo. Quindi ...

WebView.loadUrl("about:blank");
WebView.loadData(data, mime, encoding);

... fa il trucco per me. Sembra un po 'sporco, ma non avrebbe osato disobbedire Google! Non sono sicuro se qualcun altro sta facendo questo, ma io sono solo il caricamento di una stringa in che avevo letto da una "risorsa". Lo sto usando per visualizzare la guida documenti. Quindi non sto usando qualsiasi URL reale; Sto semplicemente utilizzando il WebView come un renderer HTML.

Nota: Per i neofiti là fuori (come me solo circa un mese fa) assicuratevi di sostituire "WebView" con un'istanza della variabile. Questi non sono metodi statici.

Tale lavoro approccio

webView.loadDataWithBaseURL("fake-url", "<html></html>", "text/html", "UTF-8", null);
webView.loadData(htmlBuilder.toString(), "text/html", "UTF-8");

Coloro che stanno ancora avendo il problema ho trovato una soluzione rapida basta usare un gestore per questo

    Handler handler = new Handler();
    handler.postDelayed(new Runnable() {
        @Override
        public void run() {
            webView.loadDataWithBaseURL("", html, "text/html", "UTF-8", null);
        }
    }, 10) ;

È necessario loadDataWithBaseURL in thread principale

sono stato in grado di fare il refresh del browser ad ogni aggiornamento, dando il documento HTML un diverso ID ogni volta: si prega di vedere sotto al // WEBVIEW

.
package com.example.scroll;
// philip r brenan at gmail.com, www.appaapps.com 
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.webkit.WebView;

public class MainActivity extends Activity
 {protected void onCreate(Bundle savedInstanceState)
   {super.onCreate(savedInstanceState);
    setContentView(new MyWebView(this)); 
   }
  class MyWebView extends WebView 
   {MyWebView(Context Context)
     {super(Context);
      getSettings().setJavaScriptEnabled(true);
      addJavascriptInterface(this, "Android");   
      new Thread()
       {public void run()
         {for(int j = 0; j < 100; ++j)
           {post(new Runnable()
             {public void run()
               {loadData(content(), "text/html", "utf-8"); // Display in browser
               }
             });    
            try {Thread.sleep(5000);} catch(Exception e) {}
           }  
         }
       }.start();
     } 
    int c = 0, C = 1;
    String content() 
     {final StringBuilder s = new StringBuilder();
      //s.append("<html id="+(C++)+"><body>"); // WEBVIEW REFRESHES CORRECTLY *************** 
      s.append("<html><body>");              // WEBVIEW DOES NOT REFRESH ******************

      s.append("<h1 id=11>1111</h1>");
      s.append("<script>location.href = '#22';</script>");
      for(int i = 0; i < 10; ++i) s.append("<p>"+c+c+c); ++c;

      s.append("<h1 id=22>2222</h1>");
      for(int i = 0; i < 10; ++i) s.append("<p>"+c+c+c); ++c;
      Log.e("AAAAAA", "content="+s.toString());
      s.append("</body></html>");
      return s.toString();
     }
   } 
 } 
String urlUnique = String.format("http://%s", java.util.UUID.randomUUID().toString());
                    webView.loadDataWithBaseURL(urlUnique, "<html></html>", "text/html", "UTF-8", null);
                    Thread.sleep(200);
                    webView.loadData(htmlData, "text/html", "UTF-8");
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top