如何在Picasso库的头文件中添加身份验证令牌

N S*_*rma 4 android picasso okhttp

我正在使用picasso库来下载位图,因此在api中我需要在标头中传递令牌.我尝试从这个线程Android Picasso库下面的代码,如何添加身份验证标头?

public static Picasso getImageLoader(final Context context) {
    // fetch the auth value
    sSharedPreferences = PreferenceManager.getDefaultSharedPreferences(context.getApplicationContext());

    Picasso.Builder builder = new Picasso.Builder(context);
    builder.downloader(new OkHttpDownloader(context) {
        @Override
        protected HttpURLConnection openConnection(Uri uri) throws IOException {
            HttpURLConnection connection = super.openConnection(uri);
            connection.setRequestProperty(Constant.HEADER_X_API_KEY, sSharedPreferences.getString(SharedPreferenceKeys.JSESSIONID, ""));
            return connection;
        }
    });
    sPicasso = builder.build();
    return sPicasso;
}
Run Code Online (Sandbox Code Playgroud)

毕加索请求

mTarget = new Target() {
    @Override
    public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom loadedFrom) {
        mdpImageView.setImageBitmap(bitmap);
        Logger.d(TAG, "Test");
    }

    @Override
    public void onBitmapFailed(Drawable drawable) {
        Logger.d(TAG, "Test");
    }

    @Override
    public void onPrepareLoad(Drawable drawable) {
        Logger.d(TAG, "Test");
    }
};

CustomPicasso.getImageLoader(getActivity()).with(getActivity()).load(URL).into(mTarget);
Run Code Online (Sandbox Code Playgroud)

我调试了我的代码,我发现它从来没有调用openconnection覆盖方法,OkHttpDownloader因此我的请求总是失败并且最后调用它onBitmapFailed.

请帮助我正确传递标题值所需要做的事情.

提前致谢.

N S*_*rma 8

花了两天时间来解决这个问题.对于自定义下载程序,您不必调用with方法,因为这将初始化默认下载程序和picasso实例.只需在下面这样做,这将有助于您获得位图.

Picasso.Builder builder = new Picasso.Builder(getActivity());
picasso =  builder.downloader(new OkHttpDownloader(getActivity()) {
    @Override
    protected HttpURLConnection openConnection(Uri uri) throws IOException {
        HttpURLConnection connection = super.openConnection(uri);
        connection.setRequestProperty(Constant.HEADER_X_API_KEY, mSharedPreferences.getString(SharedPreferenceKeys.JSESSIONID, ""));
        return connection;
    }
}).build();
picasso.load(url).into(mTarget);
Run Code Online (Sandbox Code Playgroud)