Я исправил проблему, изменив сохраненную строку 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
оба возвращают один и тот же результат.)