336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
Request 해서 Fail이 났을 경우, Retry를 셋팅하는 소스를 공유 하고자 한다.
package app.goplus.in.v2.network; import android.util.Log; import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; /** * Created by pallavahooja on 16/05/16. */ public abstract class RetryableCallback<T> implements Callback<T> { private int totalRetries = 3; private static final String TAG = RetryableCallback.class.getSimpleName(); private final Call<T> call; private int retryCount = 0; public RetryableCallback(Call<T> call, int totalRetries) { this.call = call; this.totalRetries = totalRetries; } @Override public void onResponse(Call<T> call, Response<T> response) { if (!APIHelper.isCallSuccess(response)) if (retryCount++ < totalRetries) { Log.v(TAG, "Retrying API Call - (" + retryCount + " / " + totalRetries + ")"); retry(); } else onFinalResponse(call, response); else onFinalResponse(call,response); } @Override public void onFailure(Call<T> call, Throwable t) { Log.e(TAG, t.getMessage()); if (retryCount++ < totalRetries) { Log.v(TAG, "Retrying API Call - (" + retryCount + " / " + totalRetries + ")"); retry(); } else onFinalFailure(call, t); } public void onFinalResponse(Call<T> call, Response<T> response) { } public void onFinalFailure(Call<T> call, Throwable t) { } private void retry() { call.clone().enqueue(this); } }
소스를 보시면 아시겠지만, 정말 간단하다.
우선 retry 함수를 보시면 단 한줄로 retry가 된다
call.clone().enqueue(this);
이건 Retrofit2 버전에만 가능하다.
Retrofit 버전에서는 inteceptor를 이용하는 방법이 있다. 아래 URL을 참조 하면 좋을 듯 하다.
http://stackoverflow.com/a/31733634
retry 카운트는 Callback을 커스터마이징 해서 진행 한다.
소스를 보시면 금방 이해 하시겠지만, retryCount 가 retry를 한 횟수를 세고,
totalRetries가 횟수를 제한 하는 역할을 한다.
여기서 retryCount는 왜 초기화를 하지 않지?? 라는 의문이 혹시 드실 수도 있다.
그 이유는 아마 retrofit2로 코딩을 하시면 아시겠지만,
한 API를 호출 할 때 Callback을 그때마다 새로 만들기 때문에
retryCount를 초기화 할 필요가 없다.
참고 하세요.
'나의 플랫폼 > 안드로이드' 카테고리의 다른 글
[Android] TextView에 Autolink와 Hyperlink 함께 설정하기 (0) | 2016.12.07 |
---|---|
[Android] TextView에 링크 적용 하기 (1) | 2016.12.07 |
[Retrofit2] Request와 Response를 커스텀화 하기 (0) | 2016.11.24 |
[Android] ONE store 최신 In-App 결제 모듈 v16.02.00 사용시 (0) | 2016.11.18 |
[Android] LinearLayout 에서 layout_weight를 사용할 때 (0) | 2016.11.18 |