2015-01-10 2 views
9

Я думал, что эти последние версии должны быть совместимы. Это твит; https://twitter.com/JakeWharton/status/553066921675857922 и в перечне изменений в версии 1.9 упоминается об этом.Модернизация 1.9 с помощью OkHttp 2.2 и перехватчиков

Однако, когда я пытаюсь это:

 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, когда он находится в пути к классам, но интерфейс еще не адаптирован?

ответ

15

Вы передаете OkHttpClient на номер RestAdapter.Builder, который принимает Client. OkHttpClient, исключительно, не относится к дооснащению, если не используется в Client реализациях.

Вы должны пройти OkHttpClient в OkClient экземпляр, который реализует Client

.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(); 
+0

Спасибо! Не могу поверить, я пропустил это: p – dzan

+0

@UsmanAfzal Это не связано с вопросом, вы должны искать, если у кого-то есть эта проблема до или задать свой вопрос. –