¿Cómo aumentar el tiempo de espera para las solicitudes de reacondicionamiento en robospice android?
He implementado robospice en mi proyecto y uso retrofit para todas las llamadas api. Para algunas de las solicitudes, necesito aumentar el tiempo de espera, por favor, hágamelo saber cómo puedo hacer eso?
Realmente estoy utilizando el servicio que extiende RetrofitGsonSpiceService. El código de mi clase de servicio está abajo:
- Cambiar ConnectionTimeout de Retrofit OkHttpClient en tiempo de ejecución
- Primavera Android Vs Retrofit
- No hay ningún error de este tipo al usar robospice-retrofit y getstream.io
- Qué es la Biblioteca RoboSpice en android
- ¿Puedo usar SpiceManager dentro de un servicio?
Clase pública MyService extends RetrofitGsonSpiceService {
@Override public void onCreate() { super.onCreate(); addRetrofitInterface(MyInterface.class); } @Override public CacheManager createCacheManager(Application application) throws CacheCreationException { CacheManager cacheManager = new CacheManager(); ObjectPersisterFactory persistFactory = new RetrofitObjectPersisterFactory(application, getConverter(), getCacheFolder()); persistFactory.setAsyncSaveEnabled(true); cacheManager.addPersister(persistFactory); return cacheManager; } @Override protected String getServerUrl() { return Utils.getBaseUrl(); } @Override protected RestAdapter.Builder createRestAdapterBuilder() { RestAdapter.Builder builder = new RestAdapter.Builder().setRequestInterceptor( new RequestInterceptor() { @Override public void intercept(RequestFacade request) { request.addHeader(Const.HEADER_DEVICE_TYPE_KEY, Const.HEADER_DEVICE_TYPE_VALUE); } } ); builder.setEndpoint(getServerUrl()).setConverter(getConverter()); return builder; }
}
- RoboSpice lanzando excepciones okhttp
- Uso de RoboSpice en un BroadcastReceiver
- Borrar datos antiguos de caché con robospice ormlite
- Robospice - Mantenga el servicio de especias continuando funcionando cuando cambia la actividad
- RoboSpice con Gson y Realm
- OnStart of new Actividad se llama antes de onStop de padre
- Robospice solicitud nunca termina si la aplicación va en el fondo y luego llega a primer plano?
- Android: cómo recuperar el objeto JSON en caso de una excepción con RoboSpice
Me tropecé aquí con una pregunta similar y finalmente encontré la respuesta en otra parte. Si hubiese existido un ejemplo más completo, habría ahorrado tiempo, así que volví a escribir lo que funcionó para mí en caso de que ayude a otros:
Adaptador con mayor tiempo de espera de lectura
// create client OkHttpClient okHttpClient = new OkHttpClient(); okHttpClient.setReadTimeout(60 * 1000, TimeUnit.MILLISECONDS); // create rest adapter using the client above RestAdapter restAdapter = new RestAdapter.Builder() .setEndpoint(getBaseApiUrl()) .setClient(new OkClient(okHttpClient)) // this gson converter below is optional. We use it for parsing dates and enums .setConverter(new GsonConverter(createApiGson())) .setLogLevel(getRetrofitLogLevel()) .build();
NOTA: para nosotros, getBaseApiUrl()
devuelve algo así como: https://some.company.com/api/
Y getRetrofitLogLevel()
devuelve RestAdapter.LogLevel.FULL
o RestAdapter.LogLevel.NONE
dependiendo del sabor de la aplicación que se construye.
Por último, estas son las principales dependencias que hacen que todo funcione:
Dependencias clave
dependencies { ... compile "com.squareup.retrofit:retrofit:1.5.0" compile "com.squareup.retrofit:retrofit-mock:1.5.0" compile "com.squareup.okhttp:okhttp:1.5.4" compile "com.google.code.gson:gson:2.2.4" ... }
En su servicio de extensión de RetrofitSpiceService
, tendrá que sobrescribir createRestAdapterBuilder()
.
@Override protected Builder createRestAdapterBuilder() { Builder builder = super.createRestAdapterBuilder(); builder.setClient(new CustomClient()); return builder; }
CustomClient
es la clase que usted necesita escribir para proveer sus propios tiempos de espera. Si está usando OkHttp, eche un vistazo al predeterminado OkClient
para referencia: https://github.com/square/retrofit/blob/43b7ea14e5aca1d710deccb95b79484b03e99bb9/retrofit/src/main/java/retrofit/client/OkClient.java
No sé acerca de robospice pero con retrofit 2+ y okhttp3 + debe establecer un nuevo cliente como este.
OkHttpClient okHttpClient = new OkHttpClient(); Retrofit retrofit = new Retrofit.Builder() .baseUrl(Constantes.URL_DOMAIN) .addConverterFactory(GsonConverterFactory.create()) .client(okHttpClient.newBuilder().connectTimeout(Constantes.TIMEOUT, TimeUnit.SECONDS).readTimeout(Constantes.TIMEOUT, TimeUnit.SECONDS).writeTimeout(Constantes.TIMEOUT, TimeUnit.SECONDS).build()) .build();
Importa esto en tu módulo build.gradle:
compile 'com.squareup.retrofit2:retrofit:2.0.0-beta3' compile 'com.squareup.retrofit2:converter-gson:2.0.0-beta3' compile 'com.squareup.okhttp3:okhttp:3.0.0-RC1'