然后记录HttpResponse的响应进程

时间:2014-11-18 17:58:18

标签: android httpresponse

如何从HttpResponse记录响应,然后在...之后处理响应。

例如当我这样做时

HttpEntity entity = resp.getEntity();
String xml = EntityUtils.toString(entity);
InputStream is = entity.getContent();

我得到例外java.lang.IllegalStateException: Content has been consumed

因为我把实体写成了一个字符串。我只想使用该字符串进行调试,然后使用InputStream处理响应中的所有内容

2 个答案:

答案 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;
}