我正在使用来自http://loopj.com/android-async-http/的asynchttpclient库,并让它调用web服务fine来检索json响应。我现在尝试调用一个web服务,该服务通过http将文件流回到客户端。因此,我使用binaryHttpResponseHandler来捕获返回的byte[]数据。但是,每次我尝试调用该方法时都失败,并且在检查可抛出对象时,异常为“org.apache.http.client.httpresponseexception:content type not allowed!”
'.
我试着根据文档指定一个允许的内容类型列表,但这并没有起到什么作用。我主要是流式PDF,但理想情况下我不想指定内容类型列表,我想能够下载任何文件类型。我使用的代码如下:

AsyncHttpClient httpClient = new AsyncHttpClient();
String[] allowedContentTypes = new String[] { "application/pdf", "image/png", "image/jpeg" };
httpClient.get(myWebServiceURL, new BinaryHttpResponseHandler(allowedContentTypes) {
    @Override
    public void onSuccess(byte[] binaryData) {
        // ....
    }
    @Override
    public void onFailure(Throwable error, byte[] binaryData) {
        // ....
        Log.e("Download-onFailure", error.getMessage());
    }
});

我也试过不指定任何内容类型,只使用:
new BinaryHttpResponseHandler()

但这没什么区别。

最佳答案

别理我,BinaryHttpResponseHandler没有什么问题。我从web服务中提取的文件是pdf、jpg、png等,因此我允许application/pdf、image/jpeg、image/png等内容类型。不过,我使用wireshark检查返回的http响应头,发现内容类型实际上是“text/html;charset=iso-8859-1”。一旦我把这个添加到允许的内容类型中,一切都正常。

10-02 00:09
查看更多