Cómo obtener una respuesta como String usando la modificación sin usar GSON o cualquier otra biblioteca en Android

Estoy tratando de obtener respuesta de la siguiente API:

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

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

Versión de modificación utilizada:

retroadaptación: 2.0.0-beta1

Lo he intentado hasta ahora:

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

recuperando

 GitHubService service = retrofit.create(GitHubService.class); service.listRepos("username", new Callback() { @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 realmente apreciada.

** Actualización ** Se ha agregado un convertidor escalar a la retroadaptación que permite una respuesta de String con menos ceremonias que mi respuesta original a continuación.

Interfaz de ejemplo –

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

Agregue ScalarsConverterFactory a su generador de modificaciones. 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 necesitará incluir el convertidor escalar en su archivo gradle –

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

Respuesta original (sigue funcionando, solo más código) —

Estoy de acuerdo con @CommonsWare en que parece un poco extraño que quiera interceptar la solicitud para procesar el JSON usted mismo. La mayoría de las veces el POJO tiene toda la información que necesita, así que no hay necesidad de perder el tiempo en el terreno JSONObject . Sospecho que su problema específico podría resolverse mejor utilizando un TypeAdapter TypeAdapter personalizado o un Converter TypeAdapter si necesita manipular el JSON. Sin embargo, la retroadaptación proporciona más el análisis JSON justo a través de Gson. También maneja muchas de las otras tareas tediosas involucradas en las solicitudes REST. Solo porque no quiera usar una de las funciones, no significa que tenga que tirar todo. Hay momentos en que solo quieres obtener la transmisión en bruto, así que aquí está cómo hacerlo:

Primero, si está utilizando Retrofit 2, debería comenzar a usar Call API. En lugar de enviar un objeto para convertir como parámetro de tipo, use ResponseBody de okhttp –

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

entonces puedes crear y ejecutar tu llamada –

 GitHubService service = retrofit.create(GitHubService.class); Call result = service.listRepos(username); result.enqueue(new Callback() { @Override public void onResponse(Response 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 toda la respuesta en una cadena. Si está pasando el cuerpo a algo que puede ingerir secuencias, puede llamar a charStream() lugar. Ver los documentos de ResponseBody .

    Intereting Posts