Notice
Recent Posts
Recent Comments
Link
투케이2K
105. (TWOK/ALGORITHM) [Android] 문법 - [Observable] http 요청 response 값 Model SerializedName 파싱 및 콜백 확인 본문
투케이2K 알고리즘
105. (TWOK/ALGORITHM) [Android] 문법 - [Observable] http 요청 response 값 Model SerializedName 파싱 및 콜백 확인
투케이2K 2023. 3. 7. 18:21[환경 설정 및 설명]
언 어 : Java
설 명 : 문법 - [Observable] http 요청 response 값 Model SerializedName 파싱 및 콜백 확인
[소스 코드]
// -------------------------------------
// [로직 처리 실시]
// -------------------------------------
try {
// [샘플 API 호출 및 Schedulers 설정 및 구독 결과 확인]
SampleApi.request()
.retry((retryCnt, e)->{ // [retry : onError 발생 시 재요청 시도 : 지정 횟수 동안 재호출]
Log.i("---","---");
Log.d("//===========//","================================================");
Log.i("","\n"+"[A_Test >> main() :: retry() : 재요청 수행]");
Log.i("","\n"+"[재요청 시도 : "+String.valueOf(retryCnt)+"]");
Log.d("//===========//","================================================");
Log.i("---","---");
return retryCnt < 3 ? true : false;
})
.subscribeOn(AndroidSchedulers.mainThread()) // [Observable (생성자) 로직을 IO 스레드에서 실행 : 백그라운드]
.observeOn(Schedulers.io()) // [Observer (관찰자) 로직을 메인 스레드에서 실행]
.subscribe(new Observer<M_Model>() { // TODO [MODEL : Observable.create 타입 지정]
@Override
public void onSubscribe(@NonNull Disposable d) {
}
@Override
public void onNext(@NonNull M_Model model) {
Log.i("---","---");
Log.w("//===========//","================================================");
Log.i("","\n"+"[A_Test >> main() :: onNext() : 데이터 확인]");
Log.i("","\n"+"[M_MODEL : "+String.valueOf(new Gson().toJson(model))+"]");
Log.i("","\n"+"[ID : "+String.valueOf(model.id)+"]");
Log.w("//===========//","================================================");
Log.i("---","---");
}
@Override
public void onError(@NonNull Throwable e) {
Log.i("---","---");
Log.e("//===========//","================================================");
Log.i("","\n"+"[A_Test >> main() :: onError() : 에러 발생]");
Log.i("","\n"+"[error : "+String.valueOf(e.getMessage())+"]");
Log.e("//===========//","================================================");
Log.i("---","---");
}
@Override
public void onComplete() {
Log.i("---","---");
Log.w("//===========//","================================================");
Log.i("","\n"+"[A_Test >> main() :: onComplete() : 완료 상태]");
Log.w("//===========//","================================================");
Log.i("---","---");
}
});
}
catch (Exception e){
e.printStackTrace();
}
// -------------------------------------
// [http 수행 클래스]
// -------------------------------------
package com.example.javaproject;
import android.util.Log;
import com.google.gson.Gson;
import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import io.reactivex.rxjava3.core.Observable;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.FormBody;
import okhttp3.HttpUrl;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
public class SampleApi {
// [request 메소드 생성]
public static Observable<M_Model> request() {
return Observable.create(subscriber -> {
try {
if (subscriber.isDisposed() == false){ // [연결된 구독자가 있는 경우]
//TODO [전송 url 정의 실시]
String url = "https://jsonplaceholder.typicode.com/posts";
//TODO [파라미터값 선언 실시]
Map params = new HashMap();
params.put("userId",1);
params.put("id",1);
//TODO [url에 파라미터 추가 실시]
HttpUrl.Builder httpBuilder = HttpUrl.get(url).newBuilder();
Set set = params.keySet();
Iterator iterator = set.iterator();
while(iterator.hasNext()){
String key = (String) iterator.next();
httpBuilder.addQueryParameter(key, String.valueOf(params.get(key))); //TODO [쿼리 파람 추가]
}
//TODO [OK HTTP 객체 선언 실시]
OkHttpClient client = new OkHttpClient();
Request.Builder request = new Request.Builder();
request.addHeader("Content-Type", "application/json; charset=utf-8;"); //TODO [헤더]
request.post(new FormBody.Builder().build()); // TODO [POST 쿼리스트링]
request.url(httpBuilder.build()); //TODO [httpBuilder 추가]
//TODO [비동기 처리 (enqueue 사용)]
client.newCall(request.build()).enqueue(new Callback() {
//TODO [성공한 경우]
@Override
public void onResponse(Call call, Response response) throws IOException {
final String responseCode = String.valueOf(response.toString());
final String responseData = response.body().string();
// --------------------------------------
// TODO [콜백 응답 반환 : MODEL 데이터 매핑]
// --------------------------------------
subscriber.onNext(new Gson().fromJson(responseData, M_Model.class));
subscriber.onComplete();
// --------------------------------------
}
//TODO [실패한 경우]
@Override
public void onFailure(Call call, IOException e) {
final String responseCode = String.valueOf(e.toString());
final String responseData = String.valueOf(e.getMessage());
// [콜백 응답 반환]
subscriber.onError(e);
subscriber.onComplete();
}
});
}
}
catch (Exception e){
e.printStackTrace();
// [onError] 에러 알림 전달
subscriber.onError(e);
}
});
}
} // TODO [클래스 종료]
반응형
'투케이2K 알고리즘' 카테고리의 다른 글
Comments