我正在测试Retrofit与Volley进行比较,我正在努力从我的请求中获得响应.例如,我做这样的事情:
RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint("http://localhost:8080")
.build();
MyService service = restAdapter.create(MyService.class);
service.getToto("toto", new Callback<Toto>() {
@Override
public void success(Toto toto, Response response) {
// Try to get response body
BufferedReader reader = null;
StringBuilder sb = new StringBuilder();
try {
reader = new BufferedReader(
new InputStreamReader(response.getBody().in()));
String line;
try {
while ((line = reader.readLine()) != null) {
sb.append(line);
}
} catch (IOException e) {
e.printStackTrace();
}
} catch (IOException e) {
e.printStackTrace();
}
String result = sb.toString();
}
@Override
public void failure(RetrofitError error) {}
});
Run Code Online (Sandbox Code Playgroud)
它工作,对象toto已设置,但出于测试目的,我还想显示服务器返回的JSON响应.
所以,我想读的InputStream,从response.getBody()它是一个TypedInputStream.不幸的是,我总是得到一个IOException : Stream is closed.
我试图使用Retrofit 的Utils类,但是我得到了同样的IOException错误.
Nit*_*tri 52
内部回调的尖括号写入"响应",然后从此响应中提取流.
service.getToto("toto", new Callback<Response>() {
@Override
public void success(Response result, Response response) {
//Try to get response body
BufferedReader reader = null;
StringBuilder sb = new StringBuilder();
try {
reader = new BufferedReader(new InputStreamReader(result.getBody().in()));
String line;
try {
while ((line = reader.readLine()) != null) {
sb.append(line);
}
} catch (IOException e) {
e.printStackTrace();
}
} catch (IOException e) {
e.printStackTrace();
}
String result = sb.toString();
}
@Override
public void failure(RetrofitError error) {
}
});
Run Code Online (Sandbox Code Playgroud)
shi*_*ami 29
在Retrofit 2.0之前
String bodyString = new String(((TypedByteArray) response.getBody()).getBytes());
Run Code Online (Sandbox Code Playgroud)
改造2.0
String bodyString = new String(response.body().bytes());
Run Code Online (Sandbox Code Playgroud)
dro*_*nce 23
如果设置用于创建服务.setLogLevel(RestAdapter.LogLevel.FULL)的RestAdapter那个,则应在调试控制台中获取原始JSON响应输出.
RestAdapter restAdapter = new RestAdapter.Builder()
.setServer("http://my_lovely_api.com")
.setLogLevel(RestAdapter.LogLevel.FULL)
.build();
mService = restAdapter.create(MyService.class);
Run Code Online (Sandbox Code Playgroud)
如果你想对这个原始响应做一些不同的事情,你仍然可以使用你在成功块中的代码来创建一个JSON字符串,假设你保留LogLevel.FULL在setLogLevel方法中,如果没有那么它就不会解析InputStream,response.getBody().in()因为它是已被阅读并关闭.
| 归档时间: |
|
| 查看次数: |
72765 次 |
| 最近记录: |