【问题标题】:Create adapter error with Dagger + Retrofit + RxJava使用 Dagger + Retrofit + RxJava 创建适配器错误
【发布时间】:2017-07-13 08:57:17
【问题描述】:

我正在尝试使用 Retrofit 获取 Observable。我收到此错误:

无法为方法 AqicnApi.getHerePollutionObservable 的 rx.Observable 创建调用适配器

这是我在 MainActivity 中遇到错误的地方:

Observable<Aqicn> aqicnObservable = aqicnApi.getHerePollutionObservable(getResources().getString(R.string.aqicn_token));

这是我的 AqicnApi 接口:

public interface AqicnApi {
    @GET("feed/here/")
    Call<Aqicn> getHerePollution(@Query("token") String token); // Query token parameter needed for API auth

    @GET("feed/here/")
    Observable<Aqicn> getHerePollutionObservable(@Query("token") String token); // Query token parameter needed for API auth
}

如果我尝试让我的数据返回一个 Aqicn 而不是一个 Observable&lt;Aqicn&gt; 使用这个,它工作得很好:

Call<Aqicn> call = aqicnApi.getHerePollution(getResources().getString(R.string.aqicn_token));

这是我的带有改造提供者的 ApiModule 类

@Module
public class ApiModule {
    private String baseUrl;

    public ApiModule(String baseUrl) {
        if(baseUrl.trim() == "") {
            throw new IllegalArgumentException("API URL not valid");
        }
        this.baseUrl = baseUrl;
    }

    // Logging
    @Provides
    public OkHttpClient provideClient() {
        ...
    }

    //Retrofit
    @Provides
    public Retrofit provideRetrofit(String baseURL, OkHttpClient client) {
        return new Retrofit.Builder()
                .baseUrl(baseURL)
                .client(client)
                .addConverterFactory(GsonConverterFactory.create())
                .build();
    }

    /**
     * Gets an instance of our Retrofit object calling the above methods then, using this Retrofit
     * object it creates an instance of AqicnApi interface by calling the create() method.
     * @return
     */
    @Provides
    public AqicnApi provideApiService() {
        return provideRetrofit(baseUrl, provideClient()).create(AqicnApi.class);
    }
}

我忘记了什么?

【问题讨论】:

    标签: android retrofit rx-java observable dagger


    【解决方案1】:

    Retrofit 中的Rx 支持是您必须添加的插件,默认情况下不存在。

    将此库添加到您的 build.gradle 中的项目中:

    compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0'
    

    并将Rx 适配器工厂提供给Retrofit builder:

    @Provides
    public Retrofit provideRetrofit(String baseURL, OkHttpClient client) {
        return new Retrofit.Builder()
                .baseUrl(baseURL)
                .client(client)
                .addConverterFactory(GsonConverterFactory.create())
                //You must provide Rx adapter factory to Retrofit
                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                .build();
    }
    

    【讨论】:

      猜你喜欢
      • 2017-04-19
      • 1970-01-01
      • 2017-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-10
      • 1970-01-01
      • 2021-05-11
      相关资源
      最近更新 更多