如何从HttpResponse
记录响应,然后在...之后处理响应。
例如当我这样做时
HttpEntity entity = resp.getEntity();
String xml = EntityUtils.toString(entity);
InputStream is = entity.getContent();
我得到例外java.lang.IllegalStateException: Content has been consumed
因为我把实体写成了一个字符串。我只想使用该字符串进行调试,然后使用InputStream处理响应中的所有内容
答案 0 :(得分:1)
HttpEntity entity = resp.getEntity();
InputStream is = entity.getContent();
String asString = getString(is);
Log.i(TAG,""+asString);
关键是要避免使用InputStream
关闭is.close()
或使用is.flush()
将其清除,以便稍后进行处理。抛出异常是因为通过调用InputStream
EntityUtils.toString(entity);
public static String getString( InputStream is) throws IOException {
int ch;
StringBuilder sb = new StringBuilder();
while((ch = is.read())!= -1)
sb.append((char)ch);
return sb.toString();
}
完成处理后,不要忘记关闭流。
答案 1 :(得分:0)
以下是可用于将HttpResponse
转换为String
的代码块示例:
String output = inputStreamToString(httpResponse.getEntity().getContent()).toString();
public static StringBuilder inputStreamToString(InputStream is){
String line;
StringBuilder sb = new StringBuilder();
BufferedReader rd = new BufferedReader(new InputStreamReader(is));
try {
while ((line = rd.readLine()) != null) {
sb.append(line);
}
} catch (IOException e) {
e.printStackTrace();
}
return sb;
}