【发布时间】:2011-05-17 05:14:19
【问题描述】:
有没有办法在 WebView 中设置超时值? 如果 url 响应太慢,我希望 WebView 超时。
【问题讨论】:
有没有办法在 WebView 中设置超时值? 如果 url 响应太慢,我希望 WebView 超时。
【问题讨论】:
我用
@Override
public void onReceivedError(WebView view, int errorCod,String description, String failingUrl) {
final Dialog dialog = new Dialog(MainActivity.this, android.R.style.Theme_NoTitleBar_Fullscreen);
dialog.setContentView(R.layout.alert_dialog);
Button btTryAgain = dialog.findViewById(R.id.bt_try_again);
btTryAgain.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v){
recreate();
}
});
dialog.show();
//Toast with error conection
Toast.makeText(getApplicationContext(), "Your Internet Connection May not be active Or " + description , Toast.LENGTH_LONG).show();
}
其中 -alert_dialog- 是一个带有重试按钮的布局
【讨论】:
我们可以使用WebViewClient的onLoadResource方法来代替Timer。像这样:
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return false;
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
progressDialog.show();
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
Log.d("WEBCLIENT", "onPageFinished");
}
@Override
public void onLoadResource(WebView view, String url) {
super.onLoadResource(view, url);
Log.d("WEBCLIENT","onLoadResource");
if(webView.getProgress() == 100) {
progressDialog.dismiss();
}
}
}
【讨论】:
您可以通过设置一个计时器来执行此操作,该计时器通过调用getProgress() 检查当前页面的进度,如果在指定时间后它小于某个阈值,那么您可以关闭当前页面的加载。
【讨论】: