Aak*_*ash 98 parsing android json retrofit
我想从以下Api得到回应:
https://api.github.com/users/username
但我不知道如何获得响应,String以便我可以使用String解析并得到JSONObject.
使用的改装版本:
改造:2.0.0-β1
我一直试过这个:
public interface GitHubService {
@GET("/users/{user}")
public String listRepos(@Path("user") String user,Callback<String> callback);
}
Run Code Online (Sandbox Code Playgroud)
检索:
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) {
}
});
Run Code Online (Sandbox Code Playgroud)
例外:
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)
Run Code Online (Sandbox Code Playgroud)
任何帮助将非常感激.
iag*_*een 198
**更新**添加了一个标量转换器进行改造,允许String响应的次数少于我原来的答案.
示例界面 -
public interface GitHubService {
@GET("/users/{user}")
Call<String> listRepos(@Path("user") String user);
}
Run Code Online (Sandbox Code Playgroud)
添加ScalarsConverterFactory到您的改造生成器. 注意:如果使用ScalarsConverterFactory和其他工厂,请先添加标量工厂.
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(ScalarsConverterFactory.create())
// add other factories here, if needed.
.build();
Run Code Online (Sandbox Code Playgroud)
您还需要在gradle文件中包含标量转换器 -
implementation 'com.squareup.retrofit2:converter-scalars:2.1.0'
Run Code Online (Sandbox Code Playgroud)
--- 原始答案(仍然有效,只需更多代码)---
我同意@CommonsWare,你想拦截自己处理JSON的请求似乎有点奇怪.大多数情况下,POJO拥有您需要的所有数据,因此无需在JSONObject陆地上乱窜.我怀疑如果你需要操纵JSON,可以使用自定义gson TypeAdapter或改进来更好地解决你的具体问题Converter.但是,改造通过Gson提供了更多的JSON解析.它还管理REST请求中涉及的许多其他繁琐任务.仅仅因为你不想使用其中一个功能,并不意味着你必须把整个事情扔掉.有时你只想获得原始流,所以这里是如何做到的 -
首先,如果您使用的是Retrofit 2,则应该开始使用CallAPI.而不是发送一个对象作为类型参数转换,使用ResponseBody从okhttp -
public interface GitHubService {
@GET("/users/{user}")
Call<ResponseBody> listRepos(@Path("user") String user);
}
Run Code Online (Sandbox Code Playgroud)
然后你可以创建和执行你的电话 -
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();
}
});
Run Code Online (Sandbox Code Playgroud)
注意上面的代码调用string()响应对象,该对象将整个响应读入String.如果你将身体传递给可以摄取溪流的东西,你可以打电话charStream().查看ResponseBody文档.
| 归档时间: |
|
| 查看次数: |
91877 次 |
| 最近记录: |