2010-11-04 11 views
13

Después de la primera llamada a LoadData(), el evento onLoadResource se activa como debería y la pantalla está bien. A continuación, quiero actualizar la pantalla con una página nueva, cuando utilizo LoadData() la segunda vez que la página no se actualiza y onLoadResource() NO DISPARA.Android WebView - 1st LoadData() funciona bien, las llamadas subsiguientes no se actualizan

Luego, la segunda llamada a LoadData() solo se dispara en PageFinished ... onPageStarted nunca se dispara.

Un problema fue llamar .reload() después de LoadData() pero eso causa todo tipo de problemas durante la otra lógica en la actividad.

¿Por qué LoadData() no funciona varias veces?

Estoy usando HTML extremadamente simple, y como el uso de .reload() hace que funcione mi instrucción LoadData() no parece ser el problema.

cualquier idea sería útil, TIA

Respuesta

22

Uso

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

que trabaja muy bien. loaddata no se actualiza la próxima vez que se carguen los datos.

+0

Alguien tiene una explicación de por qué esto funciona? También llamar dos veces a loadData también funciona (en KitKat de todos modos) pero esta solución al menos parece como si fuera menos hack – Rodney

+0

umm ... Debo extrañar algo, pero todo lo que surgió fue una página en blanco con la palabra 'data' en él – rikkitikkitumbo

+0

razón por esto. –

2

Tal enfoque de trabajo

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

que era capaz de hacer la actualización del navegador en cada actualización, dando el documento html un ID diferente cada vez: véase más adelante en la // 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(); 
    } 
    } 
} 
-1
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"); 
11

Por alguna razón usted tiene que borrar el contenido en primer lugar. Los métodos de "carga ..." no parecen agregar explícitamente su contenido, pero no funciona. Creo que solía ser WebView.clearView() pero que estaba en desuso. El documento del método obsoleto en Android site en realidad le dice que use WebView.loadUrl("about:blank") como un reemplazo para ese método. Entonces ...

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

... me sirve. Parece un poco sucio, ¡pero no me atrevería a desobedecer a Google! No estoy seguro si alguien más está haciendo esto, pero solo estoy cargando un String en el que leí de un "activo". Lo estoy usando para mostrar documentos de ayuda. Así que no estoy usando ninguna URL real; Solo uso WebView como un procesador de HTML.

Nota: Para los novatos que hay (como yo hace solo un mes), asegúrese de reemplazar "WebView" con una instancia de su variable. Estos no son métodos estáticos.

0

Necesitas loadDataWithBaseURL en hilo principal

+0

Agregue alguna explicación de cómo esto ayudará a OP a solucionar el problema –

1

Los que todavía tienen el mismo problema que encontré una solución rápida sólo tiene que utilizar un controlador para este

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