Retrofit2 + RxJava2 + RxAndroid 错误
Retrofit2 + RxJava2 + RxAndroid error
我在尝试创建 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 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
returns 一个 RxJava 1 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.*.*
并不意味着它适用于 RxJava 2
您应该使用 second 版本的 RxJava 的官方适配器:
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();
这里是 .
如果不想更新改装版。 Here 是一个非常好的库,可以在 RxJava1.x
和 RxJava2.x
对象之间进行转换。
首先,添加这个
compile "com.github.akarnokd:rxjava2-interop:0.10.2"
到 build.gradle
和使用方法
RxJavaInterop.toV2Observable(observableRx1)
转换为 Rx2 Observables。
这是我的 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'}
我在尝试创建 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 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
returns 一个 RxJava 1 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.*.*
并不意味着它适用于 RxJava 2
您应该使用 second 版本的 RxJava 的官方适配器:
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();
这里是
如果不想更新改装版。 Here 是一个非常好的库,可以在 RxJava1.x
和 RxJava2.x
对象之间进行转换。
首先,添加这个
compile "com.github.akarnokd:rxjava2-interop:0.10.2"
到 build.gradle
和使用方法
RxJavaInterop.toV2Observable(observableRx1)
转换为 Rx2 Observables。
这是我的 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'}