2015-10-12 2 views
5

Я получаю эту ошибку:AbstractMethodError при использовании RxJavaCallAdapterFactory на Модернизированный 2

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) 

при попытке использовать RxJavaCallAdapterFactory на модернизации. Я использую com.squareup.retrofit:retrofit:2.0.0-beta1 и com.squareup.retrofit:adapter-rxjava:2.0.0-beta1.

Вот как я создал интерфейс API:

Retrofit retrofit = new Retrofit.Builder() 
     .baseUrl(FORUM_SERVER_URL) 
     .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) 
     .addConverterFactory(GsonConverterFactory.create()) 
     .build(); 

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<List<Post>>() { 
       @Override 
       public void onCompleted() {} 
       @Override 
       public void onError(Throwable e) {} 
       @Override 
       public void onNext(List<Post> posts) { 
        mView.displayPosts(posts); 
       } 
      }); 
} 

getApi возвращает mForumApi
getPosts, где происходит ошибка, это API вызов

+0

Если перейти к RxJavaCallAdapterFactory класса, вы видите метод, который вам не хватает? Гитуб предполагает, что он реализован https://github.com/square/retrofit/blob/master/retrofit-adapters/rxjava/src/main/java/retrofit/RxJavaCallAdapterFactory.java#L43 – FriendlyMikhail

+0

Вы не установили 'OkHttpClient 'клиент на вашем ** RetrofitBuilder ** –

ответ

11

Для меня оказалось, что я использовал различные бета-версии компонентов

Изменение (уведомление бета1):

compile 'com.squareup.retrofit:converter-simplexml:2.0.0-beta2' 
compile 'com.squareup.retrofit:adapter-rxjava:2.0.0-beta1' 

к (теперь бета2)

compile 'com.squareup.retrofit:converter-simplexml:2.0.0-beta2' 
compile 'com.squareup.retrofit:adapter-rxjava:2.0.0-beta2' 

сделал это для меня.

Глупая ошибка, но да ...

Смежные вопросы