studio crear consumir android json parsing retrofit

crear - gson android studio



Cómo obtener una respuesta como String usando retrofit sin usar GSON o cualquier otra biblioteca en Android (1)

** Actualización ** Se ha agregado un convertidor de escalares a la actualización que permite una respuesta de String con menos ceremonia que mi respuesta original a continuación.

Interfaz de ejemplo:

public interface GitHubService { @GET("/users/{user}") Call<String> listRepos(@Path("user") String user); }

Agregue ScalarsConverterFactory a su generador de ScalarsConverterFactory . Nota: Si usa ScalarsConverterFactory y otra fábrica, agregue primero la fábrica de escalares.

Retrofit retrofit = new Retrofit.Builder() .baseUrl(BASE_URL) .addConverterFactory(ScalarsConverterFactory.create()) // add other factories here, if needed. .build();

También deberá incluir el convertidor de escalares en su archivo gradle:

implementation ''com.squareup.retrofit2:converter-scalars:2.1.0''

--- Respuesta original (todavía funciona, solo más código) ---

Estoy de acuerdo con @CommonsWare en que parece un poco extraño que desee interceptar la solicitud para procesar el JSON usted mismo. La mayoría de las veces, el POJO tiene todos los datos que necesita, por lo que no necesita perder el tiempo en JSONObject land. Sospecho que su problema específico podría resolverse mejor utilizando un Adaptador de TypeAdapter gson personalizado o un Converter TypeAdapter si necesita manipular el JSON. Sin embargo, la actualización proporciona más el análisis JSON justo a través de Gson. También gestiona muchas de las otras tareas tediosas involucradas en las solicitudes REST. El hecho de que no desee utilizar una de las funciones no significa que deba deshacerse de todo. Hay veces que solo quieres obtener la transmisión sin procesar, así que aquí está cómo hacerlo:

Primero, si está usando Retrofit 2, debe comenzar a usar la API de Call . En lugar de enviar un objeto para convertir como parámetro de tipo, use ResponseBody de okhttp -

public interface GitHubService { @GET("/users/{user}") Call<ResponseBody> listRepos(@Path("user") String user); }

entonces puedes crear y ejecutar tu llamada -

GitHubService service = retrofit.create(GitHubService.class); Call<ResponseBody> result = service.listRepos(username); result.enqueue(new Callback<ResponseBody>() { @Override public void onResponse(Response<ResponseBody> response) { try { System.out.println(response.body().string()); } catch (IOException e) { e.printStackTrace(); } } @Override public void onFailure(Throwable t) { e.printStackTrace(); } });

Nota: el código anterior llama a string() en el objeto de respuesta, que lee la respuesta completa en una cadena. Si está pasando el cuerpo a algo que puede ingerir transmisiones, puede llamar a charStream() lugar. Ver los documentos de ResponseBody .

Esta pregunta ya tiene una respuesta aquí:

Estoy tratando de obtener respuesta de la siguiente API:

https://api.github.com/users/username

Pero no sé cómo obtener una respuesta como String para poder usar el String para analizar y obtener el JSONObject .

Versión de modificación utilizada:

actualización: 2.0.0-beta1

He intentado esto hasta ahora:

public interface GitHubService { @GET("/users/{user}") public String listRepos(@Path("user") String user,Callback<String> callback); }

recuperando:

GitHubService service = retrofit.create(GitHubService.class); service.listRepos("username", new Callback<String>() { @Override public void onResponse(Response response) { System.out.println(response.toString()); } @Override public void onFailure(Throwable t) { } });

excepción:

Caused by: java.lang.IllegalArgumentException: Could not locate call adapter for class java.lang.String. Tried: * retrofit.ExecutorCallAdapterFactory at retrofit.Utils.resolveCallAdapter(Utils.java:67) at retrofit.MethodHandler.createCallAdapter(MethodHandler.java:49)

Cualquier ayuda sería muy apreciada.