Picasso使用HTTP Post方法加载图像

4

我的API对每个HTTP请求都有一些验证机制。其中一个端点具有使用HTTP POST方法加载图像的功能。POST请求正文将包含一个JSON对象,该对象从服务器端进行验证。

为此,我需要在HTTP POST请求正文中包含类似于此的JSON。

{
    "session_id": "someId",
    "image_id": "some_id"
}

我该如何使用Picasso实现这个功能?

你想下载带有头信息的图片吗? - Jackson Chengalai
不,我想知道如何使用Picasso发送POST请求。 - J.R
2
你可以使用Picasso中的自定义下载器来定制你的请求。Picasso使用OkHttpClient作为下载器。http://stackoverflow.com/questions/33455084/android-picasso-library-add-token-header - Jackson Chengalai
谢谢Jackson Chengalai先生,它有效。 - J.R
1个回答

6

我从Jackson Chengalai先生给出的提示中获得了解决方案。

创建一个Okhttp请求拦截器

private static class PicassoInterceptor implements Interceptor {

    @Override
    public Response intercept(Chain chain) throws IOException {

        final MediaType JSON
                = MediaType.parse("application/json; charset=utf-8");
        Map<String, String> map = new HashMap<String, String>();
        map.put("session_id", session_id);
        map.put("image", image);
        String requestJsonBody = new Gson().toJson(map);
        RequestBody body = RequestBody.create(JSON, requestStringBody);
        final Request original = chain.request();
        final Request.Builder requestBuilder = original.newBuilder()
                .url(url)
                .post(body);
        return chain.proceed(requestBuilder.build());
    }
}

创建一个Okhttp客户端,添加这个拦截器。
OkHttpClient okHttpClient = new OkHttpClient();
okHttpClient.interceptors().add(new PicassoInterceptor());

使用OkHttp客户端创建下载器
OkHttpDownloader = downloader = new OkHttpDownloader(okHttpClient)

使用这个下载器构建Picasso
Picasso picasso = new Picasso.Builder(context).downloader(downloader ).build(); 

这个适用于哪个版本的Picasso? - voghDev
picasso:2.5.2 和 okhttp:2.7.2 - J.R
我们可以在Picasso.load(url)中添加图像的URL。如何添加帖子正文参数? - amasidda wadeyar
@amasiddawadeyar,请参考我回答中“intercept”方法内的代码。 - J.R

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接