2016-08-16 4 views
0

Retrofit 2でAPIエンドポイントを使用しています。応答オブジェクトタイプをCallオブジェクトに変更したいとします。私はCallオブジェクトを使用して、要求を取り消す必要があります。Callオブジェクト内のレスポンスのタイプを変更する

この動作はrxJavaでは簡単です。たとえば、Accountオブジェクトを返すエンドポイントがありますが、代わりにEmailオブジェクトを返すとします。

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"); 
    } 
}); 
関連する問題