2015-10-12 15 views
5

ich diesen Fehler:AbstractMethodError bei der Verwendung von RxJavaCallAdapterFactory auf 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) 

bei dem Versuch, RxJavaCallAdapterFactory auf Retrofit zu verwenden. Ich verwende com.squareup.retrofit:retrofit:2.0.0-beta1 und com.squareup.retrofit:adapter-rxjava:2.0.0-beta1.

Hier ist, wie ich die API-Schnittstelle erstellt:

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

mForumApi = retrofit.create(ForumApi.class); 

Die FORUM_SERVER_URL ist
private static final String FORUM_SERVER_URL = "http://jsonplaceholder.typicode.com";

mein Interface-Methode ist:

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

ich es über nennen:

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 kehrt mForumApi
getPosts ist, wo der Fehler auftritt, ist es die API-Aufruf ist

+0

Wenn Sie die RxJavaCallAdapterFactory Klasse navigieren, sehen Sie die Methode, die Sie fehlen? Github schlägt vor, dass es implementiert ist https://github.com/square/retrofit/blob/master/retrofit-adapters/rxjava/src/main/java/retrofit/RxJavaCallAdapterFactory.java#L43 – FriendlyMikhail

+0

Sie haben keinen 'OkHttpClient gesetzt 'Client auf Ihrem ** RetrofitBuilder ** –

Antwort

11

Für mich ist es stellte sich heraus, dass ich verschiedene Beta-Versionen der Komponenten

ändern (Hinweis Beta1) wurde mit:

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

bis (jetzt beta2)

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

hat es für mich funktioniert.

Dumme Fehler aber ja ...

Verwandte Themen