배구 시간 제한 기간 변경
저는 제 서버에 요청하기 위해 안드로이드용 새로운 발리 프레임워크를 사용합니다.그러나 응답은 있지만 응답을 받기 전에 시간이 초과됩니다.
이 코드를 추가하려고 했습니다.
HttpConnectionParams.setConnectionTimeout(httpParams, 5000);
HttpConnectionParams.setSoTimeout(httpParams, timeoutMs);
HttpClientStack
Volley 프레임워크를 다른 정수(50000)로 변환하지만 50초 전에 여전히 시간 초과됩니다.
제한 시간을 긴 값으로 변경할 수 있는 방법이 있습니까?
» 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));
Android Volley 시간 초과를 처리하려면 사용해야 합니다.
정책 재시도
- Volley는 요청에 대한 재시도 정책을 쉽게 구현할 수 있는 방법을 제공합니다.
- Voli는 기본 소켓 및 연결을 설정합니다.모든 요청에 대해 시간이 5초로 제한됩니다.
RetryPolicy
는 시간 초과가 발생할 때 특정 요청을 재시도하는 방법에 대한 논리를 구현해야 하는 인터페이스입니다.
이 세 가지 매개 변수를 다룹니다.
- 시간 초과 - 재시도할 때마다 소켓 시간 초과를 밀리초 단위로 지정합니다.
- 재시도 횟수 - 재시도 횟수입니다.
- Back Off Multiplier - 모든 재시도 시도에 대해 소켓으로 설정된 지수 시간을 결정하는 데 사용되는 승수입니다.
예를 들어, 다음 값으로 재시도 정책이 생성된 경우
시간 초과 - 3000ms, 재시도 횟수 - 2, 멀티플라이어 백업 - 2.0
재시도 1:
- time = time + (time * Back Off Multiplier);
- 시간 = 3000 + 6000 = 9000ms
- 소켓 시간 초과 = 시간;
- 소켓 시간 제한이 9초인 발송 요청
재시도 2:
- time = time + (time * Back Off Multiplier);
- 시간 = 9000 + 18000 = 27000ms
- 소켓 시간 초과 = 시간;
- 소켓 시간 제한이 27초인 발송 요청
그래서 재시도 2가 끝날 때 여전히 소켓 타임아웃이 발생하면 발리는 다음을 던집니다.TimeoutError
UI 오류 응답 핸들러에 있습니다.
//Set a retry policy in case of SocketTimeout & ConnectionTimeout Exceptions.
//Volley does retry for you if you have specified the policy.
jsonObjRequest.setRetryPolicy(new DefaultRetryPolicy(5000,
DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
제 접근 방식에 기여하기 위해서입니다.했듯이, 이미대듯이했답,이듯,RetryPolicy
가는 길입니다.그러나 모든 요청에 대해 기본값과 다른 정책이 필요한 경우 기본 요청 클래스에서 정책을 설정할 수 있으므로 요청의 모든 인스턴스에 대해 정책을 설정할 필요가 없습니다.
이와 같은 것:
public class BaseRequest<T> extends Request<T> {
public BaseRequest(int method, String url, Response.ErrorListener listener) {
super(method, url, listener);
setRetryPolicy(getMyOwnDefaultRetryPolicy());
}
}
저의 경우 이 BaseRequest에서 확장된 GsonRequest가 있으므로 특정 요청에 대한 정책을 설정하는 것을 잊지 않으며 특정 요청이 필요할 경우에도 정책을 재정의할 수 있습니다.
/**
* @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);
}
req.setRetryPolicy(new DefaultRetryPolicy(
MY_SOCKET_TIMEOUT_MS,
DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
설정할 수 있습니다.MY_SOCKET_TIMEOUT_MS
100파운드로설정할 값은 밀리초 단위입니다.DEFAULT_MAX_RETRIES
0일 수 있습니다. 기본값은 1입니다.
int MY_SOCKET_TIMEOUT_MS=500;
stringRequest.setRetryPolicy(new DefaultRetryPolicy(
MY_SOCKET_TIMEOUT_MS,
DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
다른 방법은 사용자 정의 JsonObjectRequest에서 다음과 같이 수행할 수 있습니다.
@Override
public RetryPolicy getRetryPolicy() {
// here you can write a custom retry policy and return it
return super.getRetryPolicy();
}
출처: Android Volley 예제
위의 모든 솔루션이 귀사에 적합하지 않은 경우 대체 솔루션
기본적으로 발리는 두 시간 모두에 대해 시간 초과를 동일하게 설정합니다.setConnectionTimeout()
그리고.setReadTimeout()
의 가치로RetryPolicy
저 같은 경우에는.Volley
큰 데이터 청크에 대해 시간 초과 예외를 발생시킵니다. 자세한 내용은 다음을 참조:
com.android.volley.toolbox.HurlStack.openConnection().
내 해결책은 확장되는 클래스를 만드는 것입니다.HttpStack
내 것으로setReadTimeout()
정책.그런 다음 만들 때 사용합니다.RequestQueue
다음과 같이:
Volley.newRequestQueue(mContext.getApplicationContext(), new MyHurlStack())
나는 결국 메소드를 추가했습니다.setCurrentTimeout(int timeout)
에게RetryPolicy
그리고 그것은 구현됩니다.DefaultRetryPolicy
.
그리고 나서 저는 추가했습니다.setCurrentTimeout(int timeout)
요청 클래스에서 호출합니다.
이것이 효과가 있는 것 같습니다.
그나저나 나의 게으름에 대해 미안하고 오픈소스에 대해 만세.
언급URL : https://stackoverflow.com/questions/17094718/change-volley-timeout-duration
'programing' 카테고리의 다른 글
Javascript 라이브러리 및 CSS 폴더 구조 구성을 위한 모범 사례 (0) | 2023.08.26 |
---|---|
로컬 서버의 Ajax를 통해서만 PHP 파일에 액세스 허용 (0) | 2023.08.26 |
IOS swift 앱에서 탭 모음 숨기기 (0) | 2023.08.20 |
스위프트에게 말하는 방법중첩된 관찰 가능 개체에 바인딩할 UI 보기 (0) | 2023.08.20 |
mysql.user 잘못된 열 수 및 만료된 암호로 인해 업그레이드가 실패함 (0) | 2023.08.20 |