Ich möchte eine Fehlermeldung anzeigen, wenn beim Laden einer Webview-Seite ein Fehler auftritt (Keine Verbindung). Das ist, was ich bisher habe, ohne den Fehlerbehandlungscode:
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/");
}
}
Wie würde ich das tun?
Harsch Mittal
Alle obigen Antworten sind veraltet. Sie sollten diesen Code verwenden, nachdem Sie auf Seite fertig sind
@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.getDescription(), Toast.LENGTH_LONG).show();
}
Wie verwenden Sie das Obige, wenn Ihr Projekt auf API-Ebene < 23 abzielt?
– Michael
15. November 2016 um 3:32 Uhr
@Michael, es gibt eine andere Methode mit anderen Parametern, die in API-Ebene 1 eingeführt wurde – onReceivedError(WebView, int, String, String)
– cdeange
13. Dezember 2016 um 22:47 Uhr
Wenn kein Internet vorhanden ist, sehe ich nur „Webseite nicht gefunden“ und keiner dieser Rückrufe wird aufgerufen. Woher? Ist es auch besser, die neuere API von onReceivedError zu verwenden? Laut den Dokumenten wird es für jede Komponente auf der Seite aufgerufen. Wie kann ich es überprüfen, wenn es nur für die ganze Seite ist?
– Android-Entwickler
23. März 2017 um 15:55 Uhr
Muss man beide überschreiben, um beide Möglichkeiten der API-Ebenen abzudecken?
– MDjava
8. November 2018 um 5:24 Uhr
@MDjava ja, Sie müssen beide überschreiben, wenn Sie auf API unter und über 23 abzielen.
– Oleksandr Kruk
13. März 2019 um 11:17 Uhr
Sie haben den größten Teil des Weges dorthin … Implementieren Sie es einfach onReceivedError und behandeln Sie die gewünschten Fehler.
Implementieren Sie dies, fangen Sie jedoch keine Javascript-Fehler ab, sondern nur Verbindungsfehler usw.
– Codebeat
8. Mai 2014 um 22:55 Uhr
Legen Sie für JavaScript-Fehler einen WebChromeClient fest, der onConsoleMessage() überschreibt.
– Alex
25. November 2015 um 4:28 Uhr
Fügen Sie dies nach onpagefinished hinzu:
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();
}
Vergessen Sie nicht, android.widget.Toast zu importieren;
Aktualisierte Antwort gemäß API 23 Marshmallow
WebViewClient-Fehlerbehandlung
/*
* 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);
}
Behandlung von Netzwerkfehlern
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;
}
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
}
}
Naveed Ahmad
in onReceivedError Methode behandeln wie unten
@SuppressWarnings("deprecation")
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
handleError(errorCode,view);
}
@TargetApi(android.os.Build.VERSION_CODES.M)
@Override
public void onReceivedError(WebView view, WebResourceRequest req, WebResourceError rerr) {
// Redirect to deprecated method, so you can use it in all SDK versions
onReceivedError(view, rerr.getErrorCode(),rerr.getDescription().toString(),req.getUrl().toString());
}
HandleError-Methode unten
public static void handleError(int errorCode, WebView view) {
String message = null;
if (errorCode == WebViewClient.ERROR_AUTHENTICATION) {
message = "User authentication failed on server";
} else if (errorCode == WebViewClient.ERROR_TIMEOUT) {
message = "The server is taking too much time to communicate. Try again later.";
} else if (errorCode == WebViewClient.ERROR_TOO_MANY_REQUESTS) {
message = "Too many requests during this load";
} else if (errorCode == WebViewClient.ERROR_UNKNOWN) {
message = "Generic error";
} else if (errorCode == WebViewClient.ERROR_BAD_URL) {
message = "Check entered URL..";
} else if (errorCode == WebViewClient.ERROR_CONNECT) {
message = "Failed to connect to the server";
} else if (errorCode == WebViewClient.ERROR_FAILED_SSL_HANDSHAKE) {
message = "Failed to perform SSL handshake";
} else if (errorCode == WebViewClient.ERROR_HOST_LOOKUP) {
message = "Server or proxy hostname lookup failed";
} else if (errorCode == WebViewClient.ERROR_PROXY_AUTHENTICATION) {
message = "User authentication failed on proxy";
} else if (errorCode == WebViewClient.ERROR_REDIRECT_LOOP) {
message = "Too many redirects";
} else if (errorCode == WebViewClient.ERROR_UNSUPPORTED_AUTH_SCHEME) {
message = "Unsupported authentication scheme (not basic or digest)";
} else if (errorCode == WebViewClient.ERROR_UNSUPPORTED_SCHEME) {
message = "unsupported scheme";
} else if (errorCode == WebViewClient.ERROR_FILE) {
message = "Generic file error";
} else if (errorCode == WebViewClient.ERROR_FILE_NOT_FOUND) {
message = "File not found";
} else if (errorCode == WebViewClient.ERROR_IO) {
message = "The server failed to communicate. Try again later.";
}
if (message != null) {
Toast.makeText(getActivity(), "" + message, Toast.LENGTH_LONG).show();
}
}
10193500cookie-checkWebview-Fehler erkennen und Meldung anzeigenyes