2012-07-03 13 views
6

Estoy trabajando con Android y Phonegap, y por el momento estoy teniendo problemas con una cosa simple. Necesito configurar un webViewClient en PhoneGap webView para capturar la URL de una página finalizada y trabajar con eso.Android Phonegap - TIMEOUT ERROR al intentar establecer un WebViewClient

Este es el código:

public class PhoneGapTest extends DroidGap { 

    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     super.setBooleanProperty("loadInWebView", true); 
     super.clearCache(); 
     super.keepRunning = false; 
     super.loadUrl("file:///android_asset/www/index.html"); 

     super.appView.setWebViewClient(new WebViewClient(){ 

      @Override 
      public void onPageStarted(WebView view, String url, Bitmap bitmap) { 

      Log.i("TEST", "onPageStarted: " + url); 

      } 

      @Override 
      public void onPageFinished(WebView view, String url) { 

      Log.i("TEST", "onPageFinished: " + url); 

      } 

     }); 

    } 

Ese código no parece funcionar, la página de cargas y nunca me sale un error de tiempo de espera, pero si quito el "setWebViewClient" parte se carga la página perfectamente.

Vi que hay una clase CordovaWebViewClient, ¿tengo que usar eso en lugar de WebViewClient? He encontrado de esta manera en la web:

 this.appView.setWebViewClient(new CordovaWebViewClient(this){ 

      @Override 
      public boolean shouldOverrideUrlLoading(final WebView view, String url) { 
      Log.i("BugTest", "shouldOverrideUrlLoading: " + url); 
      return true; 
      } 

      @Override 
      public void onPageStarted(WebView view, String url, Bitmap bitmap) { 

      Log.i("TEST", "onPageStarted: " + url); 

      } 

      @Override 
      public void onPageFinished(WebView view, String url) { 

      Log.i("TEST", "onPageFinished: " + url); 

      } 

      @Override 
      public void doUpdateVisitedHistory(WebView view, String url, boolean isReload){   
      } 

     }); 

Pero ese código no está funcionando bien, yo todavía tengo un error del descanso. También vi que ya hay un miembro webVieClient, pero no si tengo que usarlo y cómo.

estoy trabajando con la versión 1.9.0 Phonegap

Gracias por leer


respuesta a Simón:

Funcionó de esta manera, gracias!

public class MainActivity extends DroidGap { 

@Override 
public void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    super.init(); 
    super.appView.clearCache(true); 
    super.appView.clearHistory(); 
    this.appView.setWebViewClient(new CustomCordovaWebViewClient(this)); 
    super.loadUrl("file:///android_asset/www/index.html"); 
} 

public class CustomCordovaWebViewClient extends CordovaWebViewClient { 

public CustomCordovaWebViewClient(DroidGap ctx) { 
    super(ctx); 
} 

@Override 
public void onPageStarted(WebView view, String url, Bitmap bitmap) { 
    super.onPageStarted(view, url, bitmap); 
    Log.i("TEST", "onPageStarted: " + url); 
} 

@Override 
public void onPageFinished(WebView view, String url) { 
    super.onPageFinished(view, url); 
    Log.i("TEST", "onPageFinished: " + url); 
} 

@Override 
public void doUpdateVisitedHistory(WebView view, String url, boolean isReload){ 
    super.doUpdateVisitedHistory(view, url, isReload); 
} 

@Override 
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { 
    super.onReceivedError(view, errorCode, description, failingUrl); 
} 

} 

} 

Respuesta

5

Para lograr lo que quiere hacer yo extender la clase CordovaWebViewClient y anular los métodos que desee, pero no se olvide de llamar a los métodos de super o PhoneGap no funcionará sin el CordovaWebViewClient ya que es un importante clase.

+0

Gracias por su respuesta Simon, lo hice, pero no funciona, actualicé la primera publicación con el código implementando lo que dijiste, ¿es eso lo que dijiste? – Spike777

+0

Finalmente funcionó llamando a "super.onPageFinished (view, url);" en el método onPageFinished ... ¡gracias! – Spike777

+0

Oh, me di cuenta de que solo funciona en la versión 1.8.1, en 1.9.0 no funciona: arroja un error al llamar a super.onPageStarted (...) – Spike777

7

Creo que he descubierto esto en las últimas versiones de Cordova (estoy usando 2.2). Falla al onPageStarted() porque está esperando un appView, que es nulo. Ajuste de la APPVIEW parece fijarlo por ejemplo

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    super.init(); 

    CordovaWebViewClient webViewClient = new CustomAcceptingWebViewClient(this); 
    webViewClient.setWebView(this.appView); 
    this.appView.setWebViewClient(webViewClient); 

    super.loadUrl("file:///android_asset/www/index.html"); 

} 

Tenga en cuenta que la super.init() también se necesita

+0

Gracias. Esto funciona como un encanto en Cordova 2.8.1 también. – shamittomar

0

Usted se olvidó de llamar súper;)

// Assign webclient. 
    this.appView.setWebViewClient(new CordovaWebViewClient(me, this.appView) { 
     @Override 
     public void onPageStarted(WebView view, String url, Bitmap favicon) { 
      super.onPageStarted(view, url, favicon); 
     } 

     @Override 
     public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { 
      super.onReceivedError(view, errorCode, description, failingUrl); 
     } 
    }); 
Cuestiones relacionadas