如何获得响应作为string使用改造,而不使用GSON或Android中的任何其他库

我试图从以下Api获得响应:

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

但我不知道如何获得响应作为String以便我可以使用String来parsing和获取JSONObject

使用的改进版本:

改造:2.0.0-β1

我已经尝试过,直到现在:

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

检索:

 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) { } }); 

例外:

 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) 

任何帮助将非常感激。

**更新**一个标量转换器已被添加到改造,允许一个String响应与较less的仪式比我原来的答案下面。

示例界面 –

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

ScalarsConverterFactory添加到您的翻新生成器。 注意:如果使用ScalarsConverterFactory和其他工厂,请首先添加标量工厂。

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

您还需要在您的gradle文件中包含标量转换器 –

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

原来的答案 (仍然有效,只是更多的代码)—

我同意@CommonsWare似乎有点奇怪,你想拦截自己处理JSON的请求。 大多数情况下,POJO都有你需要的所有数据,所以不需要在JSONObject乱搞。 我怀疑你的具体问题可能会更好地解决使用自定义gson TypeAdapter或翻新Converter如果你需要操纵JSON。 但是,翻新提供了更多的通过Gson的正义JSONparsing。 它还pipe理许多REST请求中涉及的其他繁琐任务。 只是因为你不想使用其中的一个特性,并不意味着你必须把所有的东西都扔掉。 有几次你只想得到原始stream,所以这里是如何做到这一点 –

首先,如果您正在使用Retrofit 2,则应该开始使用Call API。 而不是发送一个对象来转换为types参数,使用okhttp的ResponseBody

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

那么你可以创build和执行你的电话 –

 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(); } }); 

注意上面的代码调用响应对象上的string() ,将整个响应读入一个String。 如果您将身体传递给可以接收stream的东西,则可以调用charStream() 。 请参阅ResponseBody文档。