2016-05-18 11 views
0

私はこのような何かを達成したい:私は電話をかけていたとき、私は、各コールバックとコードで応答を解析する必要がないようにRetrofit 2.0コールを延長するにはどうすればよいですか?

MyCall<MyResponse> call = service.login(loginRequest); 

call.enqueue(
    new Runnable() { 
     @Override 
     public void run() { 
      // onResponse 
      } 
     }, new Runnable() { 
      @Override 
      public void run() { 
       // onFailure 
      } 
    }); 

は少し軽く、再利用可能です。

私はthis snippetからのコードを試してみましたが、私はエラーを取得:XXXXのコールアダプターを作成する

はできません。

私には何が欠けていますか?

答えて

1

私はCallを拡張しませんでしたが、私はCallbackを拡張し、また、あなたがenqueue()を呼び出すときにthe code is a little lighter and reusable.

public abstract class CustomCallback<T> implements Callback<T> { 

    @Override 
    public void onResponse(final Response<T> response, Retrofit retrofit) { 
     Runnable runnable = new Runnable() { 
      @Override 
      public void run() { 
       onRequestSuccess(response); 
      } 
     }; 
     runnable.run(); 
    } 

    @Override 
    public void onFailure(final Throwable t) { 
     Runnable runnable = new Runnable() { 
      @Override 
      public void run() { 
       onRequestFail(t); 
      } 
     }; 
     runnable.run(); 

    } 

    public abstract void onRequestSuccess(Response<T> response); 

    public abstract void onRequestFail(Throwable t); 

} 

を作るのに役立ちます:

call.enqueue(new CustomCallback<YourObject>() { 
      @Override 
      public void onRequestSuccess(final Response<YourObject> response) 
      { 
      } 

      @Override 
      public void onRequestFail(final Throwable t) { 

      } 
     }); 

はそれが

+0

これはまさに私が探していたものです。改造2のコードは少し異なりますが、それは魅力的なように機能しました。 –

0

Jake Whartonの投稿の下のスニペットを参照している場合は、RxJavaCallAdapterFactory.create() &への呼び出しが含まれている必要があります。コールインターフェイスは観測可能ではありません。その行を削除します。

+0

があなたをありがとう助けるのご希望回答!はい、それは私が試した最初のものでしたが、私はまだ同じエラーがありました。私は改造のために新しいので、私はまだそれの周りに私の頭をラップしようとしています。 –

関連する問題