2

私はレトロフィットサービスを持っています:

public interface MyService {
    @POST("/dosomething")
    String doSomething(@Part("param") MyType param);
}

そして短剣モジュールで:

@Provides @Singleton
MyService provideService(RestAdapter restAdapter){
    return restAdapter.create(MyMeService.class);
}

//restAdapter もそのモジュールによって提供されることに注意してください。

そして、そのサービスを使用しているテープタスクで、試しました:

    public class MyTask implements Task<MyTask.Callback> {

        //... omitted for brevity 

        @Inject
         MyService mService;

         @Override
         public void execute(final Callback callback) {
            new Thread(new Runnable() {
              @Override
              public void run() {
                 mService.doSomething(new MyType(...));
                 //...
              }
        }
    }

ただし、この mService は常に null です。MyTask はモジュールの @Module( injects = {...}) に既に追加されていますが。

だから私はタスクのコンストラクターにコンテキストを渡し、私のタスクに次のようなものを注入しようとしました:

MyApplication.get(context).inject(this);

しかし、それでも mService は常に null です。

また、代わりに MyService をアクティビティに挿入し、それを MyTask の単なるフィールドにしてから、既に作成されたものを渡す場合。MyTask はテープ タスク (square のテープ ライブラリ) であるため、次のようにシリアル化すると (当然のことながら) 失敗します。

Caused by: java.lang.UnsupportedOperationException: Attempted to serialize java.lang.Class: MyService. Forgot to register a type adapter?

Tape Task にレトロフィット サービス クラスを正しく挿入する方法はありますか?

正しく説明できたかどうかわかりません..必要に応じて追加情報を提供できます。

ありがとう。

4

0 に答える 0