Establecer Retrofit RestAdapter.LogLevel a algo que no sea FULL produce un cuerpo de respuesta vacía

Tengo las siguientes 3 clases y 1 interfaz en mi proyecto. Establecer el registro en NONE produce un "éxito", pero con un cuerpo de respuesta vacío (visto en getMovies () -> success () a continuación). La dirección URL que se genera en ese error se puede cortar y pegar en un navegador y funciona perfectamente. Si cambio el registro a LLENO todo funciona perfectamente, sin embargo, mi llave de la API entonces es claramente visible en la salida de LogCat.

public class RestClient { private ApiService apiService; public RestClient(String endpoint, boolean enableLogging) { Gson gson = new GsonBuilder() .registerTypeAdapterFactory(new ItemTypeAdapterFactory()) .setDateFormat("yyyy-MM-dd") .setPrettyPrinting() .excludeFieldsWithoutExposeAnnotation() .create(); RestAdapter restAdapter = new RestAdapter.Builder() .setLogLevel(BuildConfig.DEBUG && enableLogging ? RestAdapter.LogLevel.FULL : RestAdapter.LogLevel.NONE) .setEndpoint(endpoint) .setConverter(new GsonConverter(gson)) .setRequestInterceptor(new SessionRequestInterceptor()) .build(); apiService = restAdapter.create(ApiService.class); } public ApiService getApiService() { return apiService; } } public class ServiceEventHandler { private boolean isRetrofitLoggingEnabled; private String rottenTomatoesUrl; private String rottenTomatoesApiKey; public ServiceEventHandler(Context context) { isRetrofitLoggingEnabled = Boolean.valueOf(context.getString(R.string.retrofit_logging_enabled)); rottenTomatoesUrl = context.getString(R.string.movies_url); rottenTomatoesApiKey = context.getString(R.string.rotten_tomatoes_api_key); /* Look in res/values/secret.xml */ if (rottenTomatoesApiKey.equals("REPLACE WITH YOUR KEY")) { Toast.makeText(context, context.getString(R.string.error_replace_api_key), Toast.LENGTH_LONG).show(); } } /** * 'IN THEATER' MOVIES */ @Subscribe public void getMovies(final GetMoviesEvent event) { /** * rotten_tomatoes_api_key is stored in a strings resource file named secret.xml and * located in res/values, but secret.xml has been added to .gitignore so my key doesn't * end up in source control. * * simply create your own res/values/secret.xml file with your own Rotten Tomatoes API * key and the app will run as expected. */ ApiService apiService = new RestClient(rottenTomatoesUrl, isRetrofitLoggingEnabled).getApiService(); apiService.getMovies(rottenTomatoesApiKey, event.getPageNumber(), event.getPageLimit(), new RestCallback<Movies>(event.getCallNumber()) { @Override public void success(Movies movies, Response response) { if (response.getBody().length() > 0) { EventBus.post(movies); } else { EventBus.post(new APIErrorEvent(RetrofitError.unexpectedError(response.getUrl(), new HttpException("Empty Body")), event.getCallNumber())); } } }); } } public abstract class RestCallback<T> implements Callback<T> { private int callNumber; public RestCallback(int callNumber) { this.callNumber = callNumber; } @Override public void failure(RetrofitError error) { EventBus.post(new APIErrorEvent(error, this.callNumber)); } public int getCallNumber() { return callNumber; } } public interface ApiService { final static String APPSETTINGS = "/application_settings.json"; final static String MOVIES = "/in_theaters.json"; // IN THEATER MOVIES @GET(MOVIES) void getMovies(@Query("apikey") String key, @Query("page") int page, @Query("page_limit") int page_limit, Callback<Movies> cb); } 

Response.getBody response.getBody() devolverá un método TypedInput y su longitud ( http://square.github.io/retrofit/javadoc/retrofit/mime/TypedInput.html#length– ) no garantiza que se devuelva un número mayor que cero Cuando está presente un cuerpo de respuesta. Un valor menor o igual a 0 no significa que no tiene un cuerpo, sólo que no puede decirle cuánto tiempo es.

Supongo que la razón por la que esto sólo aparece cuando el registro está desactivado se debe a los detalles de almacenamiento intermedio necesarios para admitir el registro.

Es probable que desee realizar pruebas en onSuccess en torno a algo distinto de esa longitud (por ejemplo: código de estado de respuesta o en el objeto Movies .

  • Retrofit "IllegalStateException: Ya ejecutado"
  • GSON ignorar elementos con tipo incorrecto
  • Obtenga un objeto json simple usando retrofit 2
  • Android: agregando imagen al tweet usando la API REST de tela, Twitter y Retrofit
  • Android Retrofit 2 Simple XML Converter
  • Uso de MultipartTypedOutput
  • Usando retrofit con persistencia de Cookie
  • Saco de jabón de marco simple y cuerpo
  • ¿Existe algún patrón de desarrollo que pueda reemplazar un IntentService para las solicitudes de red?
  • Retrofit 2: enviar archivos con el objeto json
  • Manejo de excepciones API en RxJava
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.