У меня есть удаленная база данных MySQL, где есть капли изображений, которые я хочу загрузить.
Я пытался загрузить их с помощью Picasso, Glide или Universal Image Loader, потому что я собираюсь сделать это с использованием потоков и кэша.
Как выполнить запрос POST, отправив параметры с помощью ($ _POST в PHP) и получив JSONObject с закодированным изображением, и, наконец, библиотека загрузит его в представление изображения? Какой самый лучший вариант?
Например, чтобы передать ссылку с php и каким-либо образом передать параметры ..:
String user_id = "0"; //Whatever
Picasso.with(this).load("http://myhost.com/load_image.php?id="+user_id).into(imageView);
Мой PHP возвращает JSONObject со строкой «image» = (изображение, закодированное в BASE 64).
Если вы используете Glide, вы можете попробовать создать ModelLoader. Вы можете реализовать свой запрос внутри DataFetcher, разобрать байты вашего изображения из объекта JSOBObject и вернуть InputStream содержащие данные в вашем BLOB-объекте. Возможно, вы захотите создать собственный тип данных, поэтому 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);
Вы можете найти больше информации о регистрации пользовательских ModelLoader на Glide страница конфигурации. Хотя он предназначен для загрузки изображений с переменным размером, есть также вики-страница, описывающая создание пользовательского загрузчика модели, что может быть полезно.
Других решений пока нет …