2012-07-03 8 views
6

Sto lavorando con Android e PhoneGap e al momento ho problemi con una cosa semplice. Devo configurare un webViewClient per la webView di PhoneGap in modo da catturare l'URL di una pagina finita e lavorare con quello.Android PhoneGap - TIMEOUT ERROR durante il tentativo di impostare un client WebView

Questo è il codice:

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

      } 

     }); 

    } 

Quel codice non sembra funzionare, la pagina mai carichi ed ottengo un errore di timeout, ma se mi tolgo la parte "setWebViewClient" la pagina viene caricata perfettamente.

Ho visto che esiste una classe CordovaWebViewClient, devo usare quella invece di WebViewClient? Ho trovato questo modo sul 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){   
      } 

     }); 

Ma anche questo codice non funziona, ho ancora un ERRORE DI TIMEOUT. Ho anche visto che c'è già un membro di webVieClient, ma non lo faccio se devo usarlo e come.

Sto lavorando con la versione 1.9.0 PhoneGap

Grazie per aver letto


Risposta a Simone:

Ha funzionato in questo modo, grazie!

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

} 

} 

risposta

5

Per fare ciò che si vuole fare Vorrei estendere la classe CordovaWebViewClient e sovrascrivere i metodi che si desidera, ma non dimenticate di chiamare i metodi di super o PhoneGap non funziona senza il CordovaWebViewClient in quanto è un importante classe.

+0

Grazie per la risposta di Simon, l'ho fatto, ma non funziona, ho aggiornato il primo post con il codice implementando quello che hai detto, è quello che hai detto? – Spike777

+0

Alla fine ha funzionato chiamando "super.onPageFinished (view, url);" nel metodo onPageFinished ... grazie! – Spike777

+0

Oh, ho appena pensato che funzioni solo nella versione 1.8.1, in 1.9.0 non funziona: genera un errore quando si chiama super.onPageStarted (...) – Spike777

7

Penso di aver capito questo sulle ultime versioni di Cordova (sto usando 2.2). Non riesce a onPageStarted() perché è in attesa di un'appView, che è nullo. Impostazione del APPVIEW sembra risolvere il problema ad esempio

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

} 

Si noti che il super.init() è anche necessario

+0

Grazie. Funziona come un fascino anche in Cordova 2.8.1. – shamittomar

0

Hai dimenticato di chiamare super-;)

// 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); 
     } 
    }); 
Problemi correlati