Retrofit2 및 RxJava 사용 시 오류 처리
addCallAdapterFactory(RxJavaCallAdapterFactory.create())
이렇게 하면 우리는 서비스의 방법에서observable 대상을 얻을 수 있다.
public interface MyService {
@GET("user/me")
Observable getUser();
}
사실 RxJavaCallAdapterFactory는 RxJava를 사용하여 observables를 만들 때 세 가지 다른 Observable 매개 변수 설정을 지원합니다.
4
4
4
현재 서버에서 되돌아오는 데이터 형식은 대부분 다음과 같기 때문이다.
{
"code":"",
"message":"",
"data":{
}
}
"code"는 서버에서 클라이언트와 약속한 사용자 정의 오류 코드입니다. "메시지"는 오류 정보입니다. "data"에 있는 것이야말로 진정한 업무 논리 데이터입니다.
이 경우 다음과 같이 Body Response 클래스를 정의하여 이러한 데이터 유형에 대응해야 합니다.
public class BodyResponse {
private String code;
private String message;
private T data;
//getter and setter
}
만약 데이터 안의 데이터가 목록이라면 다음 두 가지 방법을 사용하면observable는Observable>>> 또는Observable>>>>로 쓰일 것입니다. 여러분의 기분이 어떠신지 모르겠지만, 어쨌든 저는 전체가 안 좋은 것 같습니다.그래서 나는 첫 번째 문법을 사용할 것이다. 이것도 대부분의 사람들의 문법이라고 믿는다.
그러면 첫 번째 방식을 사용하면 Observable은 Observable > 이라고 쓰입니다.그러면 응답 코드가 2XX가 아닌 상황에서 onError 방법에서 오류 처리를 할 수 있습니다.
observer
.subscribe(new Subscriber() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable throwable) {
BodyResponse errBody = ErrorHandler.handle(throwable);
// do something with code or message
}
@Override
public void onNext(User user) {
}
});
ErrorHandler
public class ErrorHandler {
public static BodyResponse handle(Throwable throwable) {
if (throwable instanceof HttpException) {
HttpException error = (HttpException) throwable;
try {
return new Gson().fromJson(error.response().errorBody().string(),
BodyResponse.class);
} catch (IOException e) {
e.printStackTrace();
}
} else {
throwable.printStackTrace();
}
return null;
}
}
아주 편리하죠, 아주 간단하죠?
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.