如何获得响应作为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
文档。
- 如何在改造中处理dynamicJSON?
- 如何在一个Retrofit请求的正文中发布原始的整个JSON?
- 添加标题的所有请求与改造2
- 使用Retrofit 2.0和RxJava获取响应状态代码
- 使用Rxjava Schedulers.newThread()与Schedulers.io()进行改造
- 改造期望的BEGIN_OBJECT,但是BEGIN_ARRAY
- 不支持的操作:Android,Retrofit,OkHttp。 在OkHttpClient中添加拦截器
- javax.net.ssl.SSLException:读取错误:ssl = 0x9524b800:系统调用期间发生I / O错误,由对等方重置连接
- 如何使用Retrofit-Androidlogin请求和响应正文?