如何从HttpResponse读取bytearray?

时间:2011-02-16 11:02:37

标签: android

我正在使用以下代码建立http连接:

HttpClient client = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
HttpResponse response = client.execute(httpPost);

我想从响应对象中读取一个bytearray。

我该怎么做?

4 个答案:

答案 0 :(得分:5)

您可以使用以下方法直接读取字节数组: EntityUtils.toByteArray

示例

HttpClient client = new DefaultHttpClient();
HttpGet get = new HttpGet("localhost:8080/myurl");
HttpResponse response = client.execute(get);
byte[] content = EntityUtils.toByteArray(response.getEntity());

答案 1 :(得分:1)

您可以使用:

HttpResponse response = client.execute(httpPost);
String content = EntityUtils.toString(response.getEntity());
byte[] bytes = content.getBytes("UTF8");

您可以使用适合响应的字符编码替换。

答案 2 :(得分:0)

我做了一些与此非常相似的事情,但不久之前。

查看我使用的源代码

HttpClient client = new DefaultHttpClient();
String url = "http://192.168.1.69:8888/sdroidmarshal";
HttpGet getRequest = new HttpGet(url);

ResponseHandler<String> responseHandler = new BasicResponseHandler();
String proto = client.execute(getRequest, responseHandler);

我非常肯定ResponseHandler是关键。我的get请求只返回了我需要的字符串,这非常简单。

在bytearray的情况下,你可能想要使用像这样的InputStream

ResponseHandler<InputStream> responseHandler = new BasicResponseHandler();
InputStream in = client.execute(getRequest, responseHandler);

之后只需正常处理InputStream。

一些谷歌搜索建议你可能还需要使用HttpResponseHandler()而不是BasicResponseHandler(),就像我的例子中一样,我是小提琴。

我的工作的完整源代码是here,它可能对您有所帮助。

答案 3 :(得分:0)

Kotlin 方式

在后台线程的异步任务上运行这个,否则它会通过网络任务在主线程上运行的错误

doAsync {
            val client: HttpClient = DefaultHttpClient()
            val get = HttpPost("*your url*")
            get.setHeader("Authorization","Bearer "+Utils.token)
            val response: HttpResponse = client.execute(get)
            val content = EntityUtils.toByteArray(response.getEntity())

            onComplete {
                createPdf(content)
            }
        }