¿Cómo puedo convertir un cuerpo de respuesta exitoso en un tipo específico usando retrofit?
En las llamadas de actualización de modo asíncrono
public void success(T t, Response rawResponse)
Fueron t es la respuesta convertida, y rawResponse es la respuesta en bruto. Esto le proporciona acceso tanto a la respuesta sin procesar como a la respuesta convertida.
- ¿Existe una forma de reutilizar el código del constructor para la adaptación
- ¿Cómo puedo enviar una matriz de objetos en un POST retrofit?
- Utilizar retroadaptación para descargar el archivo de imagen
- Retrofit callback obtener cuerpo de respuesta
- Método retrofit 2.0 sin respuesta
En el modo de sincronización puede obtener la respuesta convertida O la respuesta en bruto
Respuesta convertida
@GET("/users/list") List<User> userList();
Respuesta en bruto
@GET("/users/list") Response userList();
El objeto Response tiene un método para obtener el cuerpo
TypedInput getBody()
Y la api retrofit tiene una clase convertidor que puede convertir esto a un objeto java
Object fromBody(TypedInput body,Type type)
Pero no puedo averiguar cómo obtener una instancia del objeto Converter
Podría ser capaz de crear una instancia de la clase Converter, pero eso requeriría el conocimiento del objeto Gson utilizado para crear el RestAdapter, al que tal vez no tenga acceso. Idealmente, me gustaría obtener una referencia al objeto convertidor directamente el RestAdpater.
Cualquiera de los siguientes responderá mi pregunta:
- ¿Hay alguna manera de obtener una referencia al convertidor por defecto usado por retrofit?
- ¿Alguien sabe cómo se construye el convertidor por defecto? (No hay ningún constructor por defecto y hay dos Constructores
public GsonConverter(Gson gson)
y público GsonConverter (Gson Gson, String charset) - ¿Hay alguna otra forma de obtener la respuesta cruda y convertida en modo de sincronización?
- Detener y reanudar las descargas utilizando Retrofit
- RETROFIT POST Objeto Realm
- ¿Cómo pasar los parámetros de Map <String, String> o el objeto a la petición POST mediante Retrofit?
- Retrofit: agrega un parámetro de lista de cadenas a la solicitud de múltiples partes
- Uso de la función de activación de llamadas en Retrofit
- ¿Está haciendo la llamada de red segura en ArrayAdapter?
- Formulario Retrofit Codificado y Multipart en solicitud individual
- Cómo obtener archivos xml gziped con retrofit?
A continuación se muestra un ejemplo de una clase StringConverter
que implementa el Converter
encuentra en la modificación. Básicamente usted tendrá que anular el fromBody()
y decirle lo que quiere.
public class StringConverter implements Converter { /* * In default cases Retrofit calls on GSON which expects a JSON which gives * us the following error, com.google.gson.JsonSyntaxException: * java.lang.IllegalStateException: Expected BEGIN_OBJECT but was * BEGIN_ARRAY at line x column x */ @Override public Object fromBody(TypedInput typedInput, Type type) throws ConversionException { String text = null; try { text = fromStream(typedInput.in()); } catch (IOException e) { e.printStackTrace(); } return text; } @Override public TypedOutput toBody(Object o) { return null; } // Custom method to convert stream from request to string public static String fromStream(InputStream in) throws IOException { BufferedReader reader = new BufferedReader(new InputStreamReader(in)); StringBuilder out = new StringBuilder(); String newLine = System.getProperty("line.separator"); String line; while ((line = reader.readLine()) != null) { out.append(line); out.append(newLine); } return out.toString(); } }
Al aplicar esto a su solicitud, tendrá que hacer lo siguiente:
// initializing Retrofit's rest adapter RestAdapter restAdapter = new RestAdapter.Builder() .setEndpoint(ApiConstants.MAIN_URL).setLogLevel(LogLevel.FULL) .setConverter(new StringConverter()).build();
- Actualización de Android Studio 2.2: alineado APK (zipAlign) no generado con el nuevo Gradle Plugin 2.2.0
- Cómo recuperar Twitter y Facebook Autenticación y Token a través de las clases de Administrador de cuentas de Android