私はAndroidでRetrofit + OkHttpを調べようとしています。オンラインで見つけたコードは次のとおりです。
RestAdapter restAdapter = new RestAdapter.Builder().setExecutors(executor, executor)
.setClient(new OkClient(okHttpClient))
.setServer("blah").toString())
.build();
Executorサービスを使用しない場合、コードはメインスレッドで実行されますか?したがって、新しいスレッドでWeb要求を行う必要がありますか?
値を返すメソッドはそれを同期的に行います。
@GET("/user/{id}/asset")
Asset getUserAsset(@Path("id") int id);
非同期を行うには、コールバックを追加するだけです。
@GET("/user/{id}/asset")
void getUserAsset(@Path("id") int id, Callback<Asset> cb);
お役に立てれば。
よろしく!
レトロフィットメソッドは、同期実行または非同期実行のいずれかで宣言できます。
戻り値の型を持つメソッドは同期的に実行されます。
_@GET("/user/{id}/photo")
Photo getUserPhoto(@Path("id") int id);
_
非同期実行では、メソッドの最後のパラメーターがCallback
である必要があります。
_@GET("/user/{id}/photo")
void getUserPhoto(@Path("id") int id, Callback<Photo> cb);
_
Androidでは、コールバックはメインスレッドで実行されます。デスクトップアプリケーションの場合、コールバックはHTTPリクエストを実行したのと同じスレッドで発生します。
また、RetrofitはRxJavaを統合して、戻り値の型が_rx.Observable
_のメソッドをサポートします
_@GET("/user/{id}/photo")
Observable<Photo> getUserPhoto(@Path("id") int id);
_
監視可能な要求は非同期にサブスクライブされ、HTTP要求を実行した同じスレッドで監視されます。別のスレッド(Androidのメインスレッドなど)で監視するには、返されたObservable
でobserveOn(Scheduler)
を呼び出します。
注:RxJava統合は実験的です。