4

http://loopj.com/android-async-http/のAsyncHttpClientライブラリを使用しており、JSON応答を取得するためにWebサービスを正常に呼び出しています。HTTP経由でファイルをクライアントにストリーミングするWebサービスを呼び出そうとしています。したがって、私はBinaryHttpResponseHandlerを使用して、返されたbyte[]データをキャプチャしています。ただし、メソッドを呼び出そうとするたびに失敗し、Throwableオブジェクトを調べると、例外は'org.apache.http.client.HttpResponseException:Content-Typeは許可されません!'。

ドキュメントに従って許可するコンテンツタイプのリストを指定しようとしましたが、これで違いはありません。私は主に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() 

しかし、これは何の違いもありませんでした。

4

9 に答える 9

6

BinaryHttpResponseHandler に問題はありません。Web サービスからプルしているファイルは PDF、JPG、PNG などであるため、application/pdf、image/jpeg、image/png のコンテンツ タイプを許可していました。ただし、WireShark を使用して戻ってくる HTTP 応答ヘッダーを調べたところ、コンテンツ タイプが実際には「text/html;」であることがわかりました。charset=ISO-8859-1'. これを許可されたコンテンツ タイプに追加すると、すべて正常に機能しました。

于 2012-09-17T07:15:54.920 に答える
2

「受け入れられない」コンテンツを表示するには、次のメソッドを追加します

public void sendResponseMessage(HttpResponse response) {
    System.out.println(response.getHeaders("Content-Type")[0].getValue());
}

私にとっては、結果は "image/png;charset=UTF-8" でした

それを追加します;)

于 2013-03-04T10:11:34.023 に答える
1

BinaryHttpResponseHandler.java次のコードを見つけました。

boolean foundAllowedContentType = false;
for(String anAllowedContentType : mAllowedContentTypes) {
    if(anAllowedContentType.equals(contentTypeHeader.getValue())) {
        foundAllowedContentType = true;
    }
}

受け取りたいすべての種類のタイプをリストする必要があるようです。

于 2013-02-01T16:07:14.403 に答える
0

同じ問題が発生しました。ソースを確認しました。URLは以下

https://github.com/loopj/android-async-http/blob/master/library/src/main/java/com/loopj/android/http/BinaryHttpResponseHandler.java

android-async は、"image/jpeg"、"image/png" の 2 つの Content-Type のみをサポートします。</p>

Content-Type が他のものである必要がある場合は、クラスをオーバーライドする必要があると思います。

于 2014-02-13T10:47:51.350 に答える
0

許可されたタイプとして「application/octet-stream」を追加するとうまくいきました!

乾杯

于 2013-09-05T21:33:13.370 に答える
0

このようにしてください:

String[] allowedContentTypes = new String[] { "image/jpeg;charset=utf-8", "image/jpeg;charset=utf-8" };

大丈夫です。

于 2014-05-19T05:42:54.670 に答える
0

追加してみる*/*

String[] allowedContentTypes = new String[] { "*/*", "application/pdf", "image/png", "image/jpeg" };
于 2012-09-12T12:03:54.990 に答える