2016-08-16 1 views
0

Retrofit 2에서 API 끝점을 사용하고 있는데 Call 개체에서 응답 개체 유형을 변경하고 싶습니다. 요청을 취소 할 수 있도록 Call 개체를 사용해야합니다.Call 개체의 응답 유형 변경

이 동작은 rxJava를 사용하면 쉽게 수행 할 수 있습니다. 예를 들어 Account 객체를 반환하는 끝점이 있지만 전자 메일 객체를 반환하려고한다고 가정 해 보겠습니다.

public Observable<Email> getEmail(Account account) { 

    return service.getUser().map(new Func1<Account, Email>() { 
     @Override public Email call(Account account) { 

      return new Email(account.getEmail()); 
     } 
    }); 
} 

getUser() 반품 및 Observable<Account> : rxJava으로 내가 좋아하는 뭔가를 할 수 있습니다.

그러나 call.enqueue은 이러한 종류의 연결을 허용하지 않는 것 같습니다. 요청을 취소 할 수 있도록 rxJava 대신 Call<Email>을 사용하여 위의 작업을 수행 할 수 있습니까?

답변

0

개조 작업을 수행 할 방법이 없습니다. 하지만 Response<JsonElement>을 사용하고 Json 객체로 응답을 얻은 다음 json 디시리얼라이저를 사용하여 클래스로 변환 할 수 있습니다.

call.enqueue(new Callback<JsonElement>() { 
    @Override 
    public void onResponse(Call<JsonElement> call, Response<JsonElement> response) { 
     if(response.isSuccessful()){ 
      JsonElement jsonElement = response.body(); 
      JsonObject objectWhichYouNeed = jsonElement.getAsJsonObject(); 

      //use any json deserializer to convert to your class. 
     } 
     else{ 
      System.out.println(response.message()); 
     } 
    } 
    @Override 
    public void onFailure(Call<JsonElement> call, Throwable t) { 
     System.out.println("Failed"); 
    } 
});