有没有办法设置超时值WebView
?如果 url 响应太慢或者网站在 10 秒内没有加载,我希望 WebView 超时。
我真的不知道我应该从哪里开始:(
我有 2 节课,第 1 节是初学者,第 2 节是webView
. Starter 是一种线程和启动屏幕,下一个活动是 main webView
,所以我想添加一个检查器,如果站点在 4 10 秒内没有响应,它会给出错误。
我希望你们中的任何人都可以帮助我,
您可以通过设置一个 Timer 来执行此操作,该 Timer 通过调用getProgress()检查当前页面的进度,如果在某个指定时间后它小于某个阈值,则您可以关闭当前页面的加载。
这是实现计时器的代码,该计时器将检查进度并在加载页面的时间超过一定时间时触发操作。
webView.setWebChromeClient(new WebChromeClient() {
Long seconds = (long) 0.0;
public void onProgressChanged(WebView view, int progress) {
Date interestingDate = new Date();
// second < 5 here you can use your desired time you wish to wait for.
while (progress < 100 && seconds < 5) {
//following line calculates time difference
//between current time and time when page started loading.
seconds = ((new Date()).getTime() - interestingDate.getTime())/1000;
}
if(progress < 100 && seconds > 5) {
view.stopLoading();
Log.d("###", "stopped");
}
}
});
Darpans 代码将不起作用,至少不是因为参数 progress 在 期间不会改变while
,只会在下一次调用时改变。试试这个:
private long starttime = 0;
public void onProgressChanged(WebView view, int progress) {
Log.v(TAG, "progressChanged: " + progress);
if(progress == 10) starttime = System.currentTimeMillis();
long secondsSinceStart = (System.currentTimeMillis() - starttime) / 1000;
if(progress < 100) {
Log.v(TAG, "seconds since start: " + secondsSinceStart);
if(secondsSinceStart > 5){
view.stopLoading();
Log.d(TAG, "TIMEOUT -> Stopped.");
}
} else {
Log.v(TAG, progress + "% completed in: " + secondsSinceStart + " seconds");
}
}
不幸的是,这仅在建立与服务器的连接时才有效。如果不是,则onProgressChanged
仅调用两次:在 10% 和 100% 时,加载被中止。