Android Api определенные URL-адреса по умолчанию - PullRequest
0 голосов
/ 07 октября 2018

Таким образом, я выполняю запрос json в моем проекте Android, который содержит что-то вроде этого для строк URL-адресов к изображениям "http:\/\/s2.dmcdn.net\/qhQ5Y.jpg"

В моем AS AVD API 25 автоматически удаляется символ "\"и загружает изображение должным образом (используя Picasso для загрузки сетевого изображения), но в AVD API 27 выдает ошибку.Я предполагаю, потому что «\» не игнорируется автоматически, так как тот же URL без «\» загружает изображение должным образом в любом веб-браузере.

Вопрос: Как я могу упростить это, чтобы работать на всехновейшие (23+) андроид устройства?Это проблема с Picasso или разница в том, как версии Android загружают сетевые вызовы?

1 Ответ

0 голосов
/ 07 октября 2018

Я исправил проблему, изменив сохраненную строку URL-адреса без обратной косой черты

String thumburl = (videoJsonObj.getString("thumbnail_url"));
                thumburl = thumburl.replace("\'", "");

Теперь это работает на всех моих уровнях API AVD.Я все еще хочу знать, почему Пикассо исправил это по умолчанию в API 25, а не в API 27 или 28. В чем разница в том, как эти версии Android и Picasso работают вместе для загрузки ресурсов URL?

ОБНОВЛЕНИЕ : Я говорил слишком рано ... похоже, он все еще не работает над новой версией Android (Pie) на эмуляторе AS.После некоторых копаний и большого количества журналов я понял, что происходит пара вещей:

Во-первых, метод JSONObject.getString(), кажется, автоматически удаляет "\", когда он получает значение URL из JSON, используя ключ,В качестве записи значения после этого извлечения отображается URL без обратных галочек, даже без приведенного выше кода.(По-прежнему приятно иметь его на всякий случай, если система не выполняет этого автоматически.)

Таким образом, реальная проблема заключалась в новой функции Android Pie, блокирующей весь трафик http по умолчанию.Вы можете обойти эту функцию в своем приложении, как показано здесь

ИЛИ вы можете выполнить кучу манипуляций со строками, чтобы сделать сетевые вызовы вашего приложения по умолчанию более безопасными, предполагая, что у сайта, к которому вы обращаетесь, есть https адресов, но по какой-то причине возвращает http результатов по умолчанию в своих ответах JSON, как в моем случае.

Я решил оставить его в https, поскольку это будущее, добавив 's', если его не было в моих результатах, с помощью приведенной ниже манипуляции со строкой:

String thumburl = (videoJsonObj.getString("thumbnail_url"));
thumburl = thumburl.replace("\'", "");
StringBuilder imageUrlStringBuilder = new StringBuilder(thumburl);
if(imageUrlStringBuilder.charAt(4) != 's') {
   imageUrlStringBuilder.insert(4, 's');
}
thumburl = imageUrlStringBuilder.toString();
video.setVideoThumbnailUrl(thumburl);

Я считаю,эта манипуляция со строкой является лучшим способом, так как она не сломается, если обновления API возвращают https вместо его текущего возврата http адресов, потому что он проверяет наличие символа 's' в нужном месте;однако это также приведет к загрузке версии https (так как это является будущей тенденцией в Интернете), и это может не работать с устаревшими сайтами / источниками данных.(Это сработало для меня, потому что в моем случае этот сайт. https://s1.dmcdn.net/p0i-5.jpg и http://s1.dmcdn.net/p0i-5.jpg оба возвращают один и тот же результат.)

...