2016-02-29 7 views
0

Je travaille sur le code suivant pour définir le timeout sur httpClient. Cependant, mon code souligne que setConnectTimeout et setReadTimeout pas trouvé. Qu'est-ce que je fais mal?Définir connectionTimeOut et SocketTimeout en rattrapage

import com.squareup.okhttp.Interceptor; 
import com.squareup.okhttp.OkHttpClient; 
import com.squareup.okhttp.Request; 
import com.squareup.okhttp.Response; 
import com.squareup.okhttp.logging.HttpLoggingInterceptor; 

import java.io.IOException; 
import java.util.concurrent.TimeUnit; 

import in.futuretrucks.Constant.Constant; 
import retrofit.GsonConverterFactory; 
import retrofit.Retrofit; 

import static java.util.concurrent.TimeUnit.*; 

public class ServiceGeneratorFileUpload { 

    public static final String API_BASE_URL = Constant.BASE_URL; 

    private static OkHttpClient httpClient = new OkHttpClient(); 
    httpClient.setConnectTimeout(15, TimeUnit.SECONDS); // connect timeout 
    httpClient.setReadTimeout(15, TimeUnit.SECONDS); 

    private static Retrofit.Builder builder = 
      new Retrofit.Builder() 
        .baseUrl(API_BASE_URL) 
        .addConverterFactory(GsonConverterFactory.create()); 

    public static <S> S createService(Class<S> serviceClass) { 

     httpClient.interceptors().add(new Interceptor() { 
      @Override 
      public Response intercept(Chain chain) throws IOException { 
       Request original = chain.request(); 

       Request.Builder requestBuilder = original.newBuilder() 
         .header("cache-control", "no-cache") 
         .header("Content-Type", "multipart/form-data") 
         .method(original.method(), original.body()); 

       Request request = requestBuilder.build(); 
       return chain.proceed(request); 
      } 
     }); 

     //set logging interceptor. Disabled as of now. Useful to see request and response feature 
     HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor(); 
     interceptor.setLevel(HttpLoggingInterceptor.Level.BODY); 
     httpClient.interceptors().add(interceptor); 

     Retrofit retrofit = builder.client(httpClient).build(); 
     return retrofit.create(serviceClass); 
    } 


} 
+0

Elle a déjà été affichée ici dans le lien ci-dessous [Dupliquer] (http://stackoverflow.com/questions/29380844/how-to-set-a-timeout-in-retrofit-library#answer-29380845) –

Répondre

0

Ajouter la dépendance de la bibliothèque

Dans le build.gradle, inclure cette ligne:

compilation 'com.squareup.okhttp: okhttp: xxx'

Peut-être que cette aide de lien peut vous: How to set timeout in Retrofit library?

+0

I l'ai déjà inclus, mais il montre encore le même –

0

J'ai trouvé la solution moi-même. ServiceGeneratorFileUpload Classe

public class ServiceGeneratorFileUpload { 

public static final String API_BASE_URL = Constant.BASE_URL; 

private static OkHttpClient getClient() { 
    OkHttpClient client = new OkHttpClient(); 
    client.setConnectTimeout(4, TimeUnit.MINUTES); 
    client.setReadTimeout(4, TimeUnit.MINUTES); 
    return client; 
} 

private final static OkHttpClient httpClient = getClient(); 

private static Retrofit.Builder builder = 
     new Retrofit.Builder() 
       .baseUrl(API_BASE_URL) 
       .addConverterFactory(GsonConverterFactory.create()); 

public static <S> S createService(Class<S> serviceClass) { 
    Retrofit retrofit = builder.client(httpClient).build(); 
    return retrofit.create(serviceClass); 
    } 
} 

Maintenant, avec le code ci-dessus, je suis en mesure de créer mon service api en utilisant ...

MyApiService myapiservice = ServiceGeneratorFileUpload.createService(MyApiService.class) 

Utilisez la documentation sur la modernisation de comprendre comment MyApiService est créé.