shouldoverrideurlloading example android user-interface error-handling webview

android - example - shouldoverrideurlloading



Detectando error Webview y Mostrar mensaje (5)

Me gustaría mostrar un mensaje de error cuando se produce un error al cargar una página de vista web (Sin conexión). Esto es lo que tengo hasta ahora, sin el código de manejo de errores:

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

¿Cómo haría esto?


Añada esto después de onpage finished:

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

No olvides importar android.widget.Toast;


Está casi todo el camino allí ... Simplemente implemente onReceivedError y maneje los errores que desee.


Respuesta actualizada según API 23 Marshmallow

Manejo de errores WebViewClient

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

Manejo de errores de red

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


Todas las respuestas anteriores están en desuso. Deberías usar este código después de que en la página haya terminado

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


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