我使用的是http://loopj.com/android-async-http/并让它调用web服务来检索JSON响应。我现在正在尝试调用一个web服务,该服务通过HTTP将文件流式传输回客户端。因此,我使用BinaryHttpResponseHandler来捕获返回的byte[]数据。我使用的代码:
public static void getImage(Context context, String url, final ImageLoadingListener listener) {
boolean online = isOnline(context);
client = new AsyncHttpClient();
if (online) {
String[] allowedContentTypes = new String[]{"image/png", "image/jpeg"};
client.getHttpClient().getParams().setParameter(ClientPNames.ALLOW_CIRCULAR_REDIRECTS, true);
client.get(Html.fromHtml(url).toString(), new BinaryHttpResponseHandler(allowedContentTypes) {
@Override
public void onSuccess(int i, Header[] headers, byte[] bytes) {
Bitmap bmp = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
listener.imageReceived(bmp);
}
@Override
public void onFailure(int i, Header[] headers, byte[] bytes, Throwable throwable) {
printRequestResult(i, headers);
}
});
}
}
但是,当我尝试下载标题为Content-Type:设置为"unknown"的图像文件时,它失败了,并且在检查Throwable对象时,异常为"org.apache.http.client.HttpResponseException:不允许使用Content-Type!"。
我尝试下载的图像是:http://media.zenfs.com/en_us/News/Engadget/opHNMlIEDUj72LqIRjgU66Z9ddGI6_GjULpJJpg0iuQSUUUNT-wpyKA5LlWCaHw09N_KlKFNU55j81P6QLhOYwScbeX0ABeo_SL1cmNn4KEHqfL8of0dGpp1h9_2ZbgkT1PYJGuil5bt2uyYbpyXYDdCcCtFmm9Vdmvnd93dEwVY9DygmaXajJcYNj1vwPg-fbQaTqFe6Dv5GKmTm-PRaJNTzFzfOTzLDRYvDH1nQEk
如果它在浏览器中正确显示,有没有任何方法可以使用AsyncHttpClient库下载它?
我通过指定来完成内容类型检查
String[] allowedContentTypes = new String[]{".*"};
我想这不是最好的解决方案,因为它只是内容类型检查,但这是我能想出的最好的