201

Android 用の新しい Volley フレームワークを使用して、サーバーへのリクエストを行います。ただし、応答はしますが、応答を取得する前にタイムアウトします。

このコードを追加してみました:

HttpConnectionParams.setConnectionTimeout(httpParams, 5000);
HttpConnectionParams.setSoTimeout(httpParams, timeoutMs);

Volley フレームワークをHttpClientStack別の整数 (50000) に変更しますが、それでも 50 秒前にタイムアウトします。

タイムアウトを長い値に変更する方法はありますか?

4

9 に答える 9

381

Request.setRetryPolicy()および のコンストラクタを参照してくださいDefaultRetryPolicy

JsonObjectRequest myRequest = new JsonObjectRequest(Method.GET,
        url, null,
        new Response.Listener<JSONObject>() {

            @Override
            public void onResponse(JSONObject response) {
                Log.d(TAG, response.toString());
            }
        }, new Response.ErrorListener() {

            @Override
            public void onErrorResponse(VolleyError error) {
                Log.d(TAG, "Error: " + error.getMessage());
            }
});

myRequest.setRetryPolicy(new DefaultRetryPolicy(
        MY_SOCKET_TIMEOUT_MS, 
        DefaultRetryPolicy.DEFAULT_MAX_RETRIES, 
        DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
于 2013-06-18T21:36:57.037 に答える
23

私のアプローチに貢献するためだけに。すでに答えRetryPolicyたように、行く方法です。ただし、すべてのリクエストに対してデフォルトとは異なるポリシーが必要な場合は、ベース Request クラスで設定できるため、リクエストのすべてのインスタンスに対してポリシーを設定する必要はありません。

このようなもの:

public class BaseRequest<T> extends Request<T> {

    public BaseRequest(int method, String url, Response.ErrorListener listener) {
        super(method, url, listener);
        setRetryPolicy(getMyOwnDefaultRetryPolicy());
    }
}

私の場合、この BaseRequest から拡張された GsonRequest があるため、特定のリクエストのポリシーを設定するのを忘れるリスクはありません。特定のリクエストで必要な場合は、それをオーバーライドできます。

于 2013-10-07T21:29:01.853 に答える
12
/**
 * @param request
 * @param <T>
 */
public <T> void addToRequestQueue(Request<T> request) {

    request.setRetryPolicy(new DefaultRetryPolicy(
            MY_SOCKET_TIMEOUT_MS,
            DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
            DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));

    getRequestQueue().add(request);
}
于 2017-01-05T09:17:28.793 に答える
2

上記の解決策がすべてうまくいかない場合の代替解決策

デフォルトでは、Volley はタイムアウトを両方に等しく設定setConnectionTimeout()setReadTimeout()、値は からに設定しRetryPolicyます。私の場合、Volley大きなデータチャンクのタイムアウト例外をスローします:

com.android.volley.toolbox.HurlStack.openConnection(). 

HttpStack私の解決策は、独自のsetReadTimeout()ポリシーで拡張するクラスを作成することです。次に、次のように作成するときに使用しRequestQueueます。

Volley.newRequestQueue(mContext.getApplicationContext(), new MyHurlStack())
于 2014-11-11T05:25:18.657 に答える