【问题标题】:Android WebView TimeOutAndroid WebView 超时
【发布时间】:2011-05-17 05:14:19
【问题描述】:

有没有办法在 WebView 中设置超时值? 如果 url 响应太慢,我希望 WebView 超时。

【问题讨论】:

标签: android android-webview


【解决方案1】:

我用

@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- 是一个带有重试按钮的布局

【讨论】:

    【解决方案2】:

    我们可以使用WebViewClientonLoadResource方法来代替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();
            }    
        }
    }
    

    【讨论】:

    • 如果网络视图完全卡住,我认为这不会起作用。
    • 如果网页卡住的意思是,它的进度不会是 100 ,所以会一直显示进度条,直到 webView.getProgress() 是 100
    • 问题不是关于进度条,而是超时。如果网页加载完全卡在某个百分比,则此方法将不起作用,因为这些函数都不会被调用,因此无法采取行动。
    • 是的,你是对的。然后应该运行一个计时器,直到资源加载完毕
    • 太好了,节省我的时间
    【解决方案3】:

    您可以通过设置一个计时器来执行此操作,该计时器通过调用getProgress() 检查当前页面的进度,如果在指定时间后它小于某个阈值,那么您可以关闭当前页面的加载。

    【讨论】:

    • 所以你的意思是我添加计时器并通过调用getProgress()检查当前页面的进度,如果它不是100我可以调用stopLoading()。
    猜你喜欢
    • 1970-01-01
    • 2013-05-12
    • 1970-01-01
    • 2016-04-16
    • 1970-01-01
    • 2014-05-10
    • 1970-01-01
    • 2020-09-13
    • 1970-01-01
    相关资源
    最近更新 更多