2015-01-10 20 views
9

Ho pensato che queste versioni recenti dovevano essere compatibili. C'è questo tweet; https://twitter.com/JakeWharton/status/553066921675857922 e il changelog di Retrofit 1.9 lo menziona anche.Retrofit 1.9 con OkHttp 2.2 e intercettori

Tuttavia quando provo questo:

 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(); 

E ancora non funziona. Il metodo setClient si lamenta di un oggetto Client incompatibile;

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) 

Cosa mi manca? Vedo anche che OkHttpClient non implementa l'interfaccia Client.

Sto usando questo approccio per ora; https://medium.com/@nullthemall/execute-retrofit-requests-directly-on-okhttp-2-2-7e919d87b64e

Ho erroneamente interpretato il log delle modifiche? Maye Retrofit 1.9 può utilizzare OkHttpClient 2.2 quando si trova nel classpath ma l'interfaccia non è ancora stata adattata?

risposta

15

Si sta passando OkHttpClient allo RestAdapter.Builder che accetta le implementazioni Client. OkHttpClient, solo, non è correlato a Retrofit se non utilizzato nelle implementazioni Client.

Si dovrebbe passare a OkHttpClientOkClient esempio che implementa 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

Grazie! Non posso credere di averlo perso: p – dzan

+0

@UsmanAfzal Questo non è correlato alla domanda, dovresti cercare se qualcuno ha questo problema prima o fare la tua stessa domanda. –