4

でタイムアウト値を設定する方法はありWebViewますか?URLが遅すぎて応答できない場合、またはサイトが10秒以内に読み込まれない場合は、WebViewをタイムアウトにします。

どこから始めたらいいのかわからない:(

私には2つのクラスがあり、最初のクラスはスターターで、2番目のクラスはですwebView。スターターは一種のスレッドであり、開始用のスプラッシュスクリーンであり、次のアクティビティがメインwebViewであるため、サイトが4 10秒以内に応答しない場合、エラーが発生するチェッカーを追加したいと思います。

誰かが私を助けてくれることを願っています、

4

3 に答える 3

3

getProgress()を呼び出して現在のページの進行状況をチェックするタイマーを設定することでこれを行うことができ、指定された時間が経過してもしきい値よりも小さい場合は、現在のページの読み込みを閉じることができます。

于 2012-05-04T13:27:48.647 に答える
2

これは、進行状況をチェックし、ページの読み込みに一定時間以上かかる場合にアクションをトリガーするタイマーを実装するためのコードです。

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");
        }       
    }
});
于 2012-09-07T12:48:23.000 に答える
1

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");
    }
}

残念ながら、これはサーバーへの接続が確立される場合にのみ機能します。そうでない場合は、onProgressChanged2回だけ呼び出されます。10%と100%で、ロードが中止されます。

于 2012-11-08T09:46:22.623 に答える