2015-10-12 17 views
5

otrzymuję ten błąd:AbstractMethodError podczas korzystania RxJavaCallAdapterFactory na Retrofit 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) 

podczas próby użycia RxJavaCallAdapterFactory na modernizacji. Używam com.squareup.retrofit:retrofit:2.0.0-beta1 i com.squareup.retrofit:adapter-rxjava:2.0.0-beta1.

Oto jak stworzyłem interfejs 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 jest
private static final String FORUM_SERVER_URL = "http://jsonplaceholder.typicode.com";

moja metoda interfejsu:

@GET("/posts") 
public Observable<List<Post>> getPosts(); 

nazywam go poprzez:

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 zwraca mForumApi
getPosts gdzie jest błąd zdarza się, że jest to wywołanie API

+0

Jeśli przejdź do RxJavaCallAdapterFactory klasie widzisz sposób, że brakuje? Github sugeruje, że jest zaimplementowany https://github.com/square/retrofit/blob/master/retrofit-adapters/rxjava/src/main/java/retrofit/RxJavaCallAdapterFactory.java#L43 – FriendlyMikhail

+0

Nie ustawiłeś 'OkHttpClient 'klient na twoim ** RetrofitBuilder ** –

Odpowiedz

11

Dla mnie okazało się, że byłem przy użyciu różnych wersji beta komponentów

Zmiana (Zawiadomienie beta1):

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

do (teraz beta2)

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

sprawiło, że zadziałało to dla mnie.

głupi błąd, ale tak ...