Picasso 使用 HTTP post 加载图像
Picasso load image with HTTP post
我的 API 对每个 HTTP 请求都有一些验证机制。其中一个端点具有使用 HTTP post 方法加载图像的功能。 post 请求正文将包含一个从服务器端验证的 JSON 对象。
为此,我需要在 http post 请求正文中包含这样的 JSON。
{
"session_id": "someId",
"image_id": "some_id"
}
我怎样才能用 Picasso 做到这一点?
我在Mr.Jackson诚嘎来的提示下得到了解决方案
创建一个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();
我的 API 对每个 HTTP 请求都有一些验证机制。其中一个端点具有使用 HTTP post 方法加载图像的功能。 post 请求正文将包含一个从服务器端验证的 JSON 对象。
为此,我需要在 http post 请求正文中包含这样的 JSON。
{
"session_id": "someId",
"image_id": "some_id"
}
我怎样才能用 Picasso 做到这一点?
我在Mr.Jackson诚嘎来的提示下得到了解决方案
创建一个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();