有没有办法在WebView
中设置超时值?如果 url 响应速度太慢或网站在 10 秒内未加载,我希望 Web 视图超时。
我不知道我应该从哪里开始:(
我有2节课,第一节是入门课,第二节是webView
课。Starter 是一种用于启动的线程和启动画面,下一个活动是主要webView
,所以如果站点在 4 10 秒内没有响应,我想添加一个检查器,它会给出错误。
我希望你们中的任何一个人能帮助我,
您可以通过设置一个计时器来做到这一点,该计时器通过调用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 代码将不起作用,至少因为参数进度在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% 时,加载中止。