微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

android – 使用OkHttp 2.2和拦截器的Retrofit 1.9

我认为这些最近的版本应该是兼容的.有这个推文
https://twitter.com/JakeWharton/status/553066921675857922和Retrofit 1.9的更新日志也提到它.

但是当我尝试这样的时候:

OkHttpClient httpClient = new OkHttpClient();
        httpClient.interceptors().add(new TokenExpiredInterceptor());

        mRestAdapter = new RestAdapter.Builder()
                .setEndpoint(API_ENDPOINT)
                .setClient(httpClient)
                .setLogLevel(BuildConfig.DEBUG ?
                        RestAdapter.LogLevel.FULL :
                        RestAdapter.LogLevel.NONE)
                .setRequestInterceptor(new AuthorizationInterceptor())
                .build();

它仍然不起作用setClient方法引发了一个不兼容的Client对象;

Error:(29,21) error: no suitable method found for setClient(OkHttpClient)
method Builder.setClient(Client) is not applicable
(argument mismatch; OkHttpClient cannot be converted to Client)
method Builder.setClient(Provider) is not applicable
(argument mismatch; OkHttpClient cannot be converted to Provider)

我失踪了什么我也看到OkHttpClient不实现客户端界面.

我现在使用这种方法; https://medium.com/@nullthemall/execute-retrofit-requests-directly-on-okhttp-2-2-7e919d87b64e

我是否误解了变更日志? Maye Retrofit 1.9可以在类路径中使用OkHttpClient 2.2,但是界面还没有改编?

解决方法

您正在将OkHttpClient传递给接受Client实现的RestAdapter.Builder. OkHttpClient,仅在客户端实现中不使用,与Retrofit无关.

您应该将OkHttpClient传递给实现Client的OkClient实例

.setClient(new OkClient(httpClient))

OkHttpClient httpClient = new OkHttpClient();
httpClient.interceptors().add(new TokenExpiredInterceptor());

mRestAdapter = new RestAdapter.Builder()
        .setEndpoint(API_ENDPOINT)
        .setClient(new OkClient(httpClient))
        .setLogLevel(BuildConfig.DEBUG ?
                RestAdapter.LogLevel.FULL :
                RestAdapter.LogLevel.NONE)
        .setRequestInterceptor(new AuthorizationInterceptor())
        .build();

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐