2016-08-16 60 views
0

我正在使用Retrofit 2來使用API​​端點,並且想要改變Call對象中的響應對象類型。我需要使用一個Call對象,以便我可以取消請求。更改調用對象中響應的類型

這種行爲很容易與rxJava。例如,假設我有一個端點返回一個Account對象,但我想要返回一個Email對象。隨着rxJava我可以這樣做:

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>。但是,call.enqueue似乎不允許這種鏈接。有沒有辦法完成上述與Call<Email>而不是rxJava允許請求取消?

回答

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"); 
    } 
});