2012-07-03 31 views
6

Tôi đang làm việc với Android và Phonegap và hiện tại tôi đang gặp sự cố với một điều đơn giản. Tôi cần phải thiết lập một webViewClient để WebView PhoneGap để nắm bắt URL của một trang đã hoàn thành và để làm việc với điều đó.Android Phonegap - TIMEOUT ERROR khi cố gắng thiết lập WebViewClient

Đây là mã:

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

      } 

     }); 

    } 

Đó là mã không có vẻ làm việc, trang không bao giờ tải và tôi nhận được một ERROR TIMEOUT, nhưng nếu tôi loại bỏ các "setWebViewClient" phần tải trang hoàn hảo.

Tôi thấy rằng có một lớp CordovaWebViewClient, tôi có phải sử dụng nó thay vì WebViewClient không? Tôi đã tìm thấy cách này trên 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){   
      } 

     }); 

Nhưng mã đó không hoạt động, tôi vẫn có một L TIMEI THỜI GIAN. Tôi cũng thấy rằng đã có một thành viên webVieClient, nhưng tôi không nếu tôi phải sử dụng nó và làm thế nào.

Tôi đang làm việc với phiên bản 1.9.0 PhoneGap

Thanks for reading


trả lời với Simon:

Nó làm việc theo cách này, cảm ơn!

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

} 

} 

Trả lời

5

Để thực hiện những gì bạn muốn làm tôi sẽ mở rộng các lớp CordovaWebViewClient và ghi đè lên các phương pháp bạn muốn nhưng đừng quên để gọi các phương pháp siêu hay PhoneGap sẽ không làm việc nếu không có sự CordovaWebViewClient vì nó là một quan trọng lớp học.

+0

Cảm ơn câu trả lời của Simon, tôi đã làm điều đó nhưng nó không hoạt động, tôi đã cập nhật bài đăng đầu tiên bằng mã triển khai những gì bạn đã nói, đó là những gì bạn nói? – Spike777

+0

Nó cuối cùng đã làm việc gọi là "super.onPageFinished (xem, url);" trong phương thức onPageFinished ... cảm ơn! – Spike777

+0

Ồ, tôi chỉ thấy rằng nó chỉ hoạt động trong phiên bản 1.8.1, trong 1.9.0 nó không hoạt động: nó ném một lỗi khi gọi super.onPageStarted (...) – Spike777

7

Tôi nghĩ rằng tôi đã tìm ra điều này trên các phiên bản Cordova mới nhất (tôi đang sử dụng phiên bản 2.2). Nó không thành công tại onPageStarted() vì nó mong đợi một appView, mà là null. Thiết lập appView dường như để sửa chữa nó ví dụ

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

} 

Lưu ý rằng super.init() cũng là cần thiết

+0

Cảm ơn bạn. Điều này cũng giống như một sự quyến rũ trong Cordova 2.8.1. – shamittomar

0

Bạn quên gọi siêu;)

// 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); 
     } 
    }); 
Các vấn đề liên quan