2011-06-17 47 views
23

Tôi muốn hiển thị thông báo lỗi khi có lỗi khi tải trang xem trên web (Không có kết nối). Đây là những gì tôi có cho đến nay, không có mã xử lý lỗi:Phát hiện lỗi xem trên web và hiển thị thông báo

public class TrackerPage extends Activity { 

    // @Override 
    private WebView webview; 
    private ProgressDialog progressDialog; 

    private boolean error; 

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

     // Get rid of the android title bar 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 

     // Set the XML layout 
     setContentView(R.layout.tracker_page); 

     // Bundle objectbundle = this.getIntent().getExtras(); 
     webview = (WebView) findViewById(R.id.tracker); 

     final Activity activity = this; 

     // Enable JavaScript and lets the browser go back 
     webview.getSettings().setJavaScriptEnabled(true); 
     webview.canGoBack(); 

     webview.setWebViewClient(new WebViewClient() { 
      public boolean shouldOverrideUrlLoading(WebView view, String url) { 
       view.loadUrl(url); 
       return true; 
      } 

      public void onLoadResource(WebView view, String url) { 
       // Check to see if there is a progress dialog 
       if (progressDialog == null) { 
        // If no progress dialog, make one and set message 
        progressDialog = new ProgressDialog(activity); 
        progressDialog.setMessage("Loading please wait..."); 
        progressDialog.show(); 

        // Hide the webview while loading 
        webview.setEnabled(false); 
       } 
      } 

      public void onPageFinished(WebView view, String url) { 
       // Page is done loading; 
       // hide the progress dialog and show the webview 
       if (progressDialog.isShowing()) { 
        progressDialog.dismiss(); 
        progressDialog = null; 
        webview.setEnabled(true); 
       } 
      } 

     }); 

     // The URL that webview is loading 
     webview.loadUrl("http://url.org/"); 
    } 
} 

Tôi làm như thế nào?

Trả lời

20

Tất cả câu trả lời ở trên đều không được chấp nhận. Bạn nên sử dụng mã này sau trên trang xong

@Override 
    public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error){ 
      //Your code to do 
     Toast.makeText(getActivity(), "Your Internet Connection May not be active Or " + error , Toast.LENGTH_LONG).show(); 
    } 
+1

Cách sử dụng ở trên nếu dự án của bạn nhắm mục tiêu cấp API <23? – Michael

+0

@Michael, có một phương pháp khác với các tham số khác nhau được giới thiệu ở cấp API 1 - onReceivedError (WebView, int, String, String) – cdeange

+1

Nếu không có internet, tất cả những gì tôi thấy là "không tìm thấy trang web" và không ai gọi lại được gọi là. Làm thế nào mà? Ngoài ra, tốt hơn là sử dụng API mới hơn của onReceivedError? Theo tài liệu, nó được gọi cho mọi thành phần trên trang. Làm thế nào tôi có thể kiểm tra nó khi nó chỉ cho toàn bộ trang? –

27

Bạn đang ở hầu hết mọi nơi ... Chỉ cần triển khai onReceivedError và xử lý các lỗi mà bạn muốn.

+4

Thực hiện điều này nhưng không bắt lỗi javascript chỉ lỗi kết nối, v.v. – Codebeat

+4

Đối với lỗi javascript, hãy đặt giá trị WebChromeClient trênConsoleMessage(). – Alex

15

Thêm này sau khi onpagefinished:

public void onReceivedError(WebView view, int errorCod,String description, String failingUrl) { 
      Toast.makeText(Webform.this, "Your Internet Connection May not be active Or " + description , Toast.LENGTH_LONG).show(); 
     } 

Đừng quên để nhập khẩu android.widget.Toast;

5

cập nhật câu trả lời theo API 23 Marshmallow

lỗi WebViewClient Xử lý Lỗi

/* 
    * Added in API level 23 replacing :- 
    * 
    * onReceivedError(WebView view, int errorCode, String description, String failingUrl) 
    */ 
    @Override 
    public void onReceivedError(WebView view, WebResourceRequest request, 
      WebResourceError error) { 

     Toast.makeText(getActivity(), 
       "WebView Error" + error.getDescription(), 
       Toast.LENGTH_SHORT).show(); 

     super.onReceivedError(view, request, error); 

    } 

    /* 
     Added in API level 23 
    */ 
    @Override 
    public void onReceivedHttpError(WebView view, 
      WebResourceRequest request, WebResourceResponse errorResponse) { 

     Toast.makeText(getActivity(), 
       "WebView Error" + errorResponse.getReasonPhrase(), 
       Toast.LENGTH_SHORT).show(); 


     super.onReceivedHttpError(view, request, errorResponse); 
    } 

Mạng Xử lý

 webView.loadUrl(urlToLoad); 

     if (!isConnected(getActivity())) { 
      Toast.makeText(getActivity(), "You are offline ", Toast.LENGTH_SHORT).show(); 

     } 

    /** 
    * Check if there is any connectivity 
    * 
    * @param context 
    * @return is Device Connected 
    */ 
    public static boolean isConnected(Context context) { 

     ConnectivityManager cm = (ConnectivityManager) context 
       .getSystemService(Context.CONNECTIVITY_SERVICE); 

     if (null != cm) { 
      NetworkInfo info = cm.getActiveNetworkInfo(); 

      return (info != null && info.isConnected()); 
     } 
     return false; 
    } 
2
public class WebClient extends WebViewClient { 

    @Override 
    @TargetApi(Build.VERSION_CODES.M) 
    public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) { 
     super.onReceivedError(view, request, error); 
     final Uri uri = request.getUrl(); 
     handleError(view, error.getErrorCode(), error.getDescription().toString(), uri); 
    } 

    @SuppressWarnings("deprecation") 
    public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { 
     super.onReceivedError(view, errorCode, description, failingUrl); 
     final Uri uri = Uri.parse(failingUrl); 
     handleError(view, errorCode, description, uri); 
    } 

    private void handleError(WebView view, int errorCode, String description, final Uri uri) { 
     final String host = uri.getHost();// e.g. "google.com" 
     final String scheme = uri.getScheme();// e.g. "https" 
     // TODO: logic 
    } 
} 
Các vấn đề liên quan