RxJava 2和Retrofit 2错误

时间:2018-04-17 11:17:46

标签: android retrofit2 rx-java2 rx-android

我正在使用改造2和RxJava 2

compile 'com.squareup.retrofit2:retrofit:2.3.0'
compile 'com.squareup.retrofit2:converter-gson:2.3.0'
implementation 'io.reactivex.rxjava2:rxjava:2.1.12'
implementation 'io.reactivex.rxjava2:rxandroid:2.0.2'

我在调用此API时遇到此错误( https://newsapi.org/v2/top-headlines?country=us&apiKey=xxxxxxxxxxx ) -

  

引起:java.lang.IllegalArgumentException:无法创建调用   适配器   io.reactivex.Observable   方法APIInterface.getHeadlines

即使再次检查也无法解决问题 这是我的代码 -

 public class RetrofitBuilder {

        private APIsInterface mAPIsInterface;

        public APIsInterface RetrofitBuilder() {

            Retrofit retrofit = new Retrofit.Builder()
                    .baseUrl(Config.baseURL)
                    .build();

            mAPIsInterface = retrofit.create(APIsInterface.class);

            return mAPIsInterface;
        }
    }

这是API接口 -

public interface APIsInterface {

    @GET("/top_headlines")
    Observable<HeadlinesBean> getHeadlines(@Query("country") String country, @Query("apiKey") String apiKey);
}

这是我的活动中的API调用 -

RetrofitBuilder mRetrofitBuilder = new RetrofitBuilder();
        Observable<HeadlinesBean> observable = mRetrofitBuilder.RetrofitBuilder().getHeadlines("us", "227c9e8935bc4373b83e0908795e5696");

        observable.subscribe(new Observer<HeadlinesBean>() {
            @Override
            public void onSubscribe(Disposable d) {

            }

            @Override
            public void onNext(HeadlinesBean headlinesBean) {

            }

            @Override
            public void onError(Throwable e) {

            }

            @Override
            public void onComplete() {
            }
        });

1 个答案:

答案 0 :(得分:1)

我使用了这个 - .addCallAdapterFactory(RxJava2CallAdapterFactory.create())

Retrofit retrofit = new Retrofit.Builder()
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .baseUrl(Config.baseURL)
                .build();

它的工作。感谢@EpicPandaForce的答案。