1

我有一个远程 MySQL 数据库,其中有我要加载的图像的 blob。

我一直在尝试使用 Picasso、Glide 或 Universal Image Loader 来加载它们,因为我的意图是使用线程和缓存来完成。

如何执行 POST 请求,通过(PHP 中的 $_POST)发送参数并接收带有图像编码的 JSONObject,最后库将其加载到图像视图中?哪个是最好的选择?

例如,用php传递链接,并以某种方式传递参数..:

String user_id = "0"; //Whatever

Picasso.with(this).load("http://myhost.com/load_image.php?id="+user_id).into(imageView);

我的 PHP 返回一个带有字符串“image”=(以 BASE 64 编码的图像)的 JSONObject。

4

1 回答 1

1

如果你使用 Glide,你可以尝试创建一个自定义的ModelLoader。您可以在 DataFetcher 中实现您的请求,从JSOBObject中解析图像的字节,并返回一个包含 blob 中数据的InputStream 。你可能想要创建一个自定义数据类型,所以 Glide 知道要使用哪个 ModelLoader:

JSONImageModel glideModel = new JSONImageModel(url);

然后可以在GlideModule中为该类型注册模型加载器:

@Override
void registerComponents(Context context, Glide glide) {
    glide.register(JSONImageModel.class, InputStream.class, new JSONImageModelLoader.Factory());
}

任何对你的模型类型的模型的请求都会被定向到你的自定义 ModelLoader,它会获取数据并将其传递给 Glide 现有的解码器:

Glide.with(fragment)
    .load(new JSONImageModel(url))
    .into(imageView); 

您可以在 Glide 的配置 wiki 页面上找到有关注册自定义 ModelLoader 的更多信息。虽然它旨在下载可变图像大小,但也有一个wiki 页面描述了创建自定义模型加载器,这可能会有所帮助。

于 2015-05-13T15:35:23.217 回答