#java #image #android-studio #url #android-glide
Вопрос:
Проблема:
Я использую библиотеку Glide в Android Studio для загрузки изображений в просмотр изображений с URL-адреса, проблема может заключаться в том, что иногда в URL-адресе нет изображения, то есть URL-адрес существует, но он не содержит никакого изображения. Например:
1) Этот URL-адрес содержит изображение:
https://static.hogarmania.com/archivos/201210/merienda-321x171x80xX.jpg
2) Но этот URL-адрес не содержит изображения
https://www.petitchef.es/imgupl/recipe/md-155916p233026.jpg
Вопрос:
Есть ли какой-либо способ, чтобы перед загрузкой изображения с помощью библиотеки Glide я мог проверить, содержит ли полученный мной URL-адрес изображение или нет?
Комментарии:
1. Учитывая, что оба URL-адреса есть
.jpg
в ссылке, но один не содержит изображения, тогда нет, как вы узнаете, не загрузив сначала содержимое ссылки? В противном случае перед вызовом библиотеки glide выполните санитарную проверку данных (на наличие 404 или других ошибок).2. Выполните команду HEAD и посмотрите на заголовок
Content-type
ответа.3. В Glide нет встроенного механизма для вашего сценария. Вам придется справиться с этим вручную.
4. Ресурс, на который ссылается второй URL — адрес, не существует.
Ответ №1:
- Шаг 1: Вы должны проверить ответ на URL-адрес. Вы можете обратиться к приведенному ниже коду. Обратитесь к документации здесь.
URL u = new URL ( "http://www.example.com/");
HttpURLConnection hUC = ( HttpURLConnection ) u.openConnection ();
hUC.setRequestMethod ("GET"); //OR hUC.setRequestMethod ("HEAD");
hUC.connect () ;
int code = hUC.getResponseCode() ;
System.out.println(code);
- Шаг 2: Проверьте, является ли это изображение с приведенным ниже кодом.
URLConnection connection = null;
try {
connection = new URL(imageURL).openConnection();
} catch (IOException e) {
e.printStackTrace();
}
String contentType = connection.getHeaderField("Content-Type");
boolean img = contentType.startsWith("image/"); // if img is true then it is an image
- Вы также можете добавить заполнитель в изображение с помощью Glide. Вы можете ознакомиться с заполнителями здесь.
Комментарии:
1. Это извлекает ресурс, который специально не был нужен, и не указывает, было ли это изображение, о котором просил ОП.
2. Обе ссылки, указанные в вопросе, были изображениями, но сервер не был готов обработать запрос в одном из них. Нужно проверить, активна ссылка или нет, прежде чем проверять, было ли это изображение. Тем не менее, я отредактирую свой ответ.
3. Можно проверить, активна ли «ссылка» и является ли она изображением одновременно. Вам не нужны два
URL
цикла s, дваHttpURLConnections
и два цикла HTTP-запроса/ответа. И одна из ссылок вообще не существовала: она получила 404 Не найдена. Ничего общего с тем, что сервер не «готов обработать запрос»..