Subscriber
を作成してサブスクライブしようとすると、次のようなエラーメッセージが表示されます。
can not resolve method 'subscribe(anonymous rx.Subscriber<GooglePlacesResponse>)'
build.gradle
// JSON Parsing
compile 'com.google.code.gson:gson:2.6.1'
compile 'com.squareup.retrofit2:retrofit:2.1.0'
compile 'com.squareup.retrofit2:converter-gson:2.1.0'
compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0'
compile 'io.reactivex.rxjava2:rxjava:2.0.2'
compile 'io.reactivex.rxjava2:rxandroid:2.0.1
GooglePlaceService.Java
public interface GooglePlaceService {
public static final String GOOGLE_API_KEY = "google_api_key";
@GET("maps/api/place/nearbysearch/json?radius=2000&key="+GOOGLE_API_KEY)
Observable<GooglePlacesResponse> getNearbyPlaces(@Query("location") String location);
}
ApiUtils.Java
public class ApiUtils {
public static final String GOOGLE_PLACE_BASE_URL = "https://maps.googleapis.com/";
public static GooglePlaceService getGooglePlaceService() {
return getClient(GOOGLE_PLACE_BASE_URL).create(GooglePlaceService.class);
}
public static Retrofit getClient(String baseUrl) {
Retrofit retrofit = new Retrofit.Builder()
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.baseUrl(baseUrl)
.build();
return retrofit;
}
}
観察可能Observable<GooglePlacesResponse>
は以下の通りです。
Observable<GooglePlacesResponse> mGooglePlacesResponseObervable = ApiUtils.getGooglePlaceService().getNearbyPlaces(latitude + "," + longitude);
mGooglePlacesResponseObervable
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<GooglePlacesResponse>() { <-- Error here : can not resolve method `subscribe(anonymous rx.Subscriber<GooglePlacesResponse>)`
@Override
public void onNext(GooglePlacesResponse googlePlacesResponse) {
}
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
});
RxJavaCallAdapter
はRxJava1 Observable
を返します。 RxJava2には RxJava2CallAdapter
を使用する必要があります。それはまだ公式のレトロフィットリリースにはないようですが、2.1.1スナップショットにはあります。アダプターを自分でコンパイルするか、sonatypeスナップショットリポジトリから依存関係をプルすることができます。
build.gradle
のrepositories
セクションに以下を追加します---
repositories {
// Other repos...
maven {
url = "https://oss.sonatype.org/content/repositories/snapshots/"
}
}
レトロフィットの依存関係を2.1.1-SNAPSHOT
バージョンに更新します。 adapter-rxjava
もadapter-rxjava2
に変更することに注意してください---
compile 'com.squareup.retrofit2:retrofit:2.1.1-SNAPSHOT'
compile 'com.squareup.retrofit2:converter-gson:2.1.1-SNAPSHOT'
compile 'com.squareup.retrofit2:adapter-rxjava2:2.1.1-SNAPSHOT'
RxJava2CallAdapterFactory
を使用するようにレトロフィットビルダーを更新します---
Retrofit retrofit = new Retrofit.Builder()
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.baseUrl(baseUrl)
.build();
2.1.1がリリースされると、通常の依存関係に戻ることができます。
アダプタのバージョンが2.*.*
であるという事実は、それがRxJava2での使用を目的としていることを意味するものではありません。
RxJavaのsecondバージョンの公式アダプターを使用する必要があります。
implementation 'com.squareup.retrofit2:adapter-rxjava2:2.3.0' // works with RxJava 2
次に、ファクトリを追加できます。
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://api.example.com")
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.build();
これが 完全な答え です。
これが私のbuild.gradle設定です、おそらくこれは他の人を助けるでしょう
depencies{
compile 'com.squareup.retrofit2:retrofit:2.3.0'
compile 'com.squareup.retrofit2:converter-gson:2.1.0'
compile 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'
compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
compile 'com.squareup.okhttp3:okhttp:3.8.0'
compile 'com.squareup.okhttp3:logging-interceptor:3.8.0'}
レトロフィットバージョンを更新したくない場合。 Here は、_RxJava1.x
_から_RxJava2.x
_オブジェクトへの変換に最適なライブラリの1つです。まず、これを追加します
_compile "com.github.akarnokd:rxjava2-interop:0.10.2"
_
to _build.gradle
_ and Use methodRxJavaInterop.toV2Observable(observableRx1)
Rx2Observablesに変換します。