我想在加载webview页面时出错(无连接)时显示错误消息。这是我到目前为止,没有错误处理代码:
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/");
}
}
我该怎么做?
答案 0 :(得分:28)
你大部分都在那里......只需实施onReceivedError
并处理你想要的错误。
答案 1 :(得分:24)
以上所有答案均已弃用。 您应该在页面完成后使用此代码
@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();
}
答案 2 :(得分:17)
在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();
}
不要忘记导入android.widget.Toast;
答案 3 :(得分:6)
根据API 23 Marshmallow
更新了答案WebViewClient错误处理
"exceptionMessage": "Error converting value System.Byte[] to type 'Test'. Path ''.",
"exceptionType": "Newtonsoft.Json.JsonSerializationException"
网络错误处理
/*
* 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);
}
答案 4 :(得分:3)
cd build
cmake ..
make -j12
答案 5 :(得分:0)
在onReceivedError
方法句柄中如下所示
@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方法
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();
}
}