RxJava 2与Retrofit 2调用API时出现Observable调用适配器创建异常求助
解决Retrofit 2 + RxJava 2无法创建Observable调用适配器的问题
嘿,这个坑我踩过!你遇到的IllegalArgumentException: Unable to create call adapter for io.reactivex.Observable错误,本质是Retrofit不知道怎么把API请求转换成RxJava2的Observable类型——因为你的依赖里少了Retrofit和RxJava2对接的专用适配器。
第一步:补全缺失的依赖
你现在的依赖里有Retrofit核心、Gson转换器、RxJava2和RxAndroid,但还差retrofit2-adapter-rxjava2这个关键依赖。把它加到你的依赖配置里(版本和Retrofit保持一致2.3.0):
compile 'com.squareup.retrofit2:retrofit:2.3.0' compile 'com.squareup.retrofit2:converter-gson:2.3.0' compile 'com.squareup.retrofit2:adapter-rxjava2:2.3.0' // 新增这个依赖 implementation 'io.reactivex.rxjava2:rxjava:2.1.12' implementation 'io.reactivex.rxjava2:rxandroid:2.0.2'
第二步:配置Retrofit实例时添加RxJava2适配器
在构建Retrofit对象的时候,必须调用addCallAdapterFactory()把RxJava2的适配器加进去,不然Retrofit还是找不到对应的转换逻辑:
Retrofit retrofit = new Retrofit.Builder() .baseUrl("https://newsapi.org/") .addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) // 一定要加这个! .build();
第三步:确认API接口的返回类型
检查你的APIsInterface里的方法,确保返回的是RxJava2的Observable(别不小心导入了RxJava1的rx.Observable):
public interface APIsInterface { @GET("v2/top-headlines") Observable<NewsResponse> getTopHeadlines( @Query("country") String country, @Query("apiKey") String apiKey ); }
做完这三步,再调用API应该就不会报这个错误啦!
内容的提问来源于stack exchange,提问作者Gissipi_453
相关产品推荐
相关产品推荐

