8

NetworkImageViewVolley'sを使用して、基本 HTTP 認証が必要な REST API から画像をロードしたいと考えています。したがって、HTTP リクエストにヘッダーを追加する必要があります。

私は次のアプローチを作成しました:

オーバーライドRequest.getHeaders()-この質問で説明されているとおり。これは問題ありませんが、問題はImageLoaderハードnew ImageRequest()コーディングされているため、Request実装を渡すImageLoaderことができず、簡単に継承および調整できないことです (再実装する必要があるメソッドはプライベート プロパティを使用します)。

解決策は、Volley ライブラリ自体を変更することです (これは避けたいことです)。

ここで説明されているように、カスタム HttpClientStack を使用します。このアプローチを使用すると、HTTP 通信を傍受し、必要なヘッダーを追加できます。しかし、これは正しい方法ではないと思います-ボレーによるHttpClientの自動選択を失います(ジンジャーブレッド対HCおよびIC)。


私が見逃しているこれを達成するためのより簡単な方法はありますか?

4

2 に答える 2

8

HTTP スタックが最適だと思います。Volley とまったく同じように、SDK バージョンに基づいてオーバーライドを行う場合、HttpClient の自動選択が失われることはありません。

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) {
        HurlStack stack = new HurlStack() {
            @Override
            public HttpResponse performRequest(Request<?> request, Map<String, String> headers)
                throws IOException, AuthFailureError {

                headers.putAll(MyApp.getAuthParams());

                return super.performRequest(request, headers);
            }
        };

        requestQueue = Volley.newRequestQueue(getApplicationContext(), stack);

    } else {
        HttpClientStack stack = new HttpClientStack(AndroidHttpClient.newInstance("volley/0")) {
            @Override
            public HttpResponse performRequest(Request<?> request, Map<String, String> headers)
                throws IOException, AuthFailureError {

                headers.putAll(MyApp.getAuthParams());

                return super.performRequest(request, headers);
            }
        };

        requestQueue = Volley.newRequestQueue(getApplicationContext(), stack);
    }

Volley ソース(53 行目)を参照してください。

于 2013-07-25T14:20:50.307 に答える
6

私もオーバーライドgetHeaders()しました。これまでのところ、それをより簡単に行う方法を見つけていません。

Authorization ヘッダーを含めるには、このオーバーライドされたリクエストの例https://github.com/njzk2/VolleyTwitter/blob/master/src/com/njzk2/twitterbrowser/TokenRequest.javaを参照してください。

Volley コードから、Request オブジェクトをオーバーライドしない限り、カスタム ヘッダーを追加する方法がわかりません。

さらに、画像に関しては、ImageRequests は ImageLoader によって作成されます。

これを可能にするために Volley を変更する場合、ImageLoader で ImageRequest を拡張するカスタム クラスを使用できるようにします。ただし、ImageLoader の匿名 ImageRequest クラスにより、少し複雑になります。

于 2013-06-04T13:57:55.363 に答える