在 Retrofit 2 上使用 RxJavaCallAdapterFactory 时出现 AbstractMethodError [英] AbstractMethodError when using RxJavaCallAdapterFactory on Retrofit 2
问题描述
我收到此错误:
致命异常:主要E/AndroidRuntime:java.lang.AbstractMethodError:未实现抽象方法在改造.RxJavaCallAdapterFactory.get(RxJavaCallAdapterFactory.java)在retrofit.Retrofit.nextCallAdapter(Retrofit.java:189)在retrofit.Retrofit.callAdapter(Retrofit.java:175)在改造.MethodHandler.createCallAdapter(MethodHandler.java:45)在改造.MethodHandler.create(MethodHandler.java:26)在retrofit.Retrofit.loadMethodHandler(Retrofit.java:151)at retrofit.Retrofit$1.invoke(Retrofit.java:132)在 $Proxy0.getPosts(本机方法)
尝试在改造中使用 RxJavaCallAdapterFactory 时.我正在使用 com.squareup.retrofit:retrofit:2.0.0-beta1
和 com.squareup.retrofit:adapter-rxjava:2.0.0-beta1
.>
这是我创建 api 接口的方式:
Retrofit 改造 = new Retrofit.Builder().baseUrl(FORUM_SERVER_URL).addCallAdapterFactory(RxJavaCallAdapterFactory.create()).addConverterFactory(GsonConverterFactory.create()).建造();mForumApi = retrofit.create(ForumApi.class);
FORUM_SERVER_URL 是private static final String FORUM_SERVER_URL = "http://jsonplaceholder.typicode.com";
我的接口方法是:
@GET("/posts")public Observable<List<Post>>getPosts();
我通过以下方式调用它:
mForum.getApi().getPosts().subscribeOn(Schedulers.newThread()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer>() {@覆盖公共无效 onCompleted() {}@覆盖public void onError(Throwable e) {}@覆盖public void onNext(List posts) {mView.displayPosts(posts);}});}
getApi 返回 mForumApi
getPosts 是错误发生的地方,它是 API 调用
对我来说,事实证明我使用的是组件的不同测试版
变化(注意 beta1):
compile 'com.squareup.retrofit:converter-simplexml:2.0.0-beta2'编译'com.squareup.retrofit:adapter-rxjava:2.0.0-beta1'
到(现在是 beta2)
compile 'com.squareup.retrofit:converter-simplexml:2.0.0-beta2'编译'com.squareup.retrofit:adapter-rxjava:2.0.0-beta2'
让它对我有用.
愚蠢的错误,但是是的...
I get this error:
FATAL EXCEPTION: main
E/AndroidRuntime: java.lang.AbstractMethodError: abstract method not implemented
at retrofit.RxJavaCallAdapterFactory.get(RxJavaCallAdapterFactory.java)
at retrofit.Retrofit.nextCallAdapter(Retrofit.java:189)
at retrofit.Retrofit.callAdapter(Retrofit.java:175)
at retrofit.MethodHandler.createCallAdapter(MethodHandler.java:45)
at retrofit.MethodHandler.create(MethodHandler.java:26)
at retrofit.Retrofit.loadMethodHandler(Retrofit.java:151)
at retrofit.Retrofit$1.invoke(Retrofit.java:132)
at $Proxy0.getPosts(Native Method)
when trying to use RxJavaCallAdapterFactory on retrofit. I'm using com.squareup.retrofit:retrofit:2.0.0-beta1
and com.squareup.retrofit:adapter-rxjava:2.0.0-beta1
.
Here's how I created the api interface:
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(FORUM_SERVER_URL)
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.build();
mForumApi = retrofit.create(ForumApi.class);
The FORUM_SERVER_URL is
private static final String FORUM_SERVER_URL = "http://jsonplaceholder.typicode.com";
my interface method is:
@GET("/posts")
public Observable<List<Post>> getPosts();
I call it via:
mForum.getApi()
.getPosts()
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<List<Post>>() {
@Override
public void onCompleted() {}
@Override
public void onError(Throwable e) {}
@Override
public void onNext(List<Post> posts) {
mView.displayPosts(posts);
}
});
}
getApi returns mForumApi
getPosts is where the error happens, it's the API call
For me it turned out that I was using different beta versions of the components
Changing (notice beta1):
compile 'com.squareup.retrofit:converter-simplexml:2.0.0-beta2'
compile 'com.squareup.retrofit:adapter-rxjava:2.0.0-beta1'
to (now beta2)
compile 'com.squareup.retrofit:converter-simplexml:2.0.0-beta2'
compile 'com.squareup.retrofit:adapter-rxjava:2.0.0-beta2'
made it work for me.
Stupid error but yeah...
这篇关于在 Retrofit 2 上使用 RxJavaCallAdapterFactory 时出现 AbstractMethodError的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!