Webview Android 上的超时



有没有办法在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% 时,加载中止。

相关内容

  • 没有找到相关文章

最新更新