2015-09-19 15 views
6

Trong API21 phương thức shouldInterceptRequest đã sửa đổi của Google để sử dụng WebResourceRequest request thay vì String url. Có cách nào tôi có thể viết một lớp chung mở rộng WebViewClient và xử lý cả hai phương pháp? phiên bản API tối thiểu của tôi là 18.Cách xử lý thay đổi tham số shouldInterceptRequest trong API21?

Cảm ơn Krystian

Trả lời

13

Google sửa đổi phương pháp shouldInterceptRequest sử dụng yêu cầu WebResourceRequest thay vì String url

Không, họ thêm một giây phương pháp shouldInterceptRequest(). Cả hai đều có sẵn trong API cấp 21+; phiên bản String có sẵn trên API cấp 11+. Mặc dù String được đánh dấu là không được dùng nữa, nhưng phiên bản String sẽ được hỗ trợ trong một thời gian dài, để có khả năng tương thích ngược.

Có cách nào tôi có thể viết một lớp chung mở rộng WebViewClient và xử lý cả hai phương pháp?

Việc xây dựng trong việc thực hiện các phiên bản WebResourceRequest của shouldInterceptRequest() chỉ đơn giản gọi thi String của shouldInterceptRequest():

public WebResourceResponse shouldInterceptRequest(WebView view, 
     WebResourceRequest request) { 
    return shouldInterceptRequest(view, request.getUrl().toString()); 
} 

(từ the source code như ngay bây giờ)

Vì vậy, bạn có hai lựa chọn :

  1. Chỉ cần ghi đè lên phiên bản String, nếu bạn không cần WebResourceRequest và nó sẽ được sử dụng trên tất cả các cấp API có liên quan.

  2. Ghi đè cả hai, biết rằng WebResourceRequest một sẽ được sử dụng trên cấp API 21+ và phiên bản String sẽ được sử dụng ở cấp API 11-20.

+0

Cảm ơn bạn CommonsWare, trên thực tế những gì tôi đã làm là triển khai cả hai phương pháp và sử dụng '@TargetApi (Build.VERSION_CODES.LOLLIPOP)' trên API21. – Krystian

+0

Tôi nghĩ rằng phiên bản chuỗi ghi đè nên được tốt. –

Các vấn đề liên quan