2016-08-16 33 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"); 
    } 
});