Android WebView TimeOut

Есть ли способ установить значение тайм-аута в WebView? Я хочу, чтобы WebView был установлен по тайм-ауту, если URL-адрес слишком медленный для ответа.


person user430926    schedule 29.11.2010    source источник
comment
эта помощь помогает stackoverflow.com/a/7772884/169630   -  person suraj jain    schedule 12.04.2012


Ответы (3)


Вы можете сделать это, установив таймер, который проверяет прогресс текущей страницы, вызвав getProgress (), и если по истечении определенного времени оно меньше некоторого порога, вы можете отклонить загрузку текущей страницы.

person bhups    schedule 29.11.2010
comment
Так вы имеете в виду, что я добавляю таймер и проверяю прогресс текущей страницы, вызывая getProgress (), если он еще не 100, я могу вызвать stopLoading (). - person user430926; 29.11.2010

Мы можем использовать onLoadResource метод WebViewClient вместо 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();
        }    
    }
}
person John    schedule 21.07.2015
comment
Я не думаю, что это сработает, если веб-представление полностью зависло. - person Przemysław Wrzesiński; 21.09.2016
comment
Если веб-страница застряла, это означает, что ее прогресс не будет 100, поэтому индикатор выполнения будет отображаться до тех пор, пока webView.getProgress () не станет 100 - person John; 12.12.2016
comment
Вопрос был не в индикаторе выполнения, а в таймауте. Этот метод не будет работать, если загрузка веб-страницы полностью застрянет на каком-то проценте, потому что ни одна из этих функций не будет вызвана, поэтому не будет возможности предпринять действия. - person Przemysław Wrzesiński; 12.12.2016
comment
Да, ты прав. Затем таймер должен работать до тех пор, пока ресурсы не будут загружены. - person John; 12.12.2016
comment
отлично, сэкономь мое время - person MehrAmoon; 14.02.2019

я использую

@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- - это макет с кнопкой для повторной попытки

person JoaquinBu    schedule 27.12.2020