Maison > Questions et réponses > le corps du texte
J'utilise
@Override
public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
super.onReceivedError(view, request, error);
PtrCLog.d("WebFragment", "onReceivedError: " + "");
}
Cette méthode n'a pas été annulée. Après vérification, il est indiqué qu'elle nécessite l'API23. . Quelqu'un connaît-il d'autres moyens d'obtenir 404 ?
phpcn_u15822017-05-16 13:28:53
new WebViewClient() {
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
super.onReceivedError(view, errorCode, description, failingUrl);
if (errorCode == 404) {
doSomething();
}
}
@Override
public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
super.onReceivedError(view, request, error);
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.M) {
int errorCode = error.getErrorCode();
if (errorCode == 404) {
doSomething();
}
}
}
};
滿天的星座2017-05-16 13:28:53
Exécutez une AsyncTask dans onPageStarted, utilisez un client Http tel que OkHttpClient dans AsyncTask pour faire une demande pour l'URL à laquelle il faut accéder et obtenez le code
class WebViewStatusRequester extends AsyncTask<String, String, Integer> {
@Override
protected void onPreExecute() {
super.onPreExecute();
web.setVisibility(View.GONE);
}
@Override
protected void onPostExecute(Integer result) {
super.onPostExecute(result);
if(result == 1) {
web.setVisibility(View.VISIBLE);
} else if(result == 0) {
showLoadFail();
}
}
@Override
protected Integer doInBackground(String... params) {
String url = params[0];
if(url.substring(0, 4).equals("file") == false) {
try {
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder().url(url).build();
Response response = client.newCall(request).execute();
if(response.isSuccessful()) {
return 1;
} else {
Log.i("TAG", "fail code:" + response.code());
return 0;
}
} catch (IOException e) {
e.printStackTrace();
}
return 0;
}
return 1;
}
}
Ici, Webview et OkHttpClient sont effectivement chargés, mais le WebView est masqué lorsque l'AsyncTask est en cours d'exécution. S'il est confirmé qu'il est 200, il sera affiché. Si ce n'est pas 200, la page dont le chargement a échoué sera affichée.