Страницы

Поиск по вопросам

пятница, 21 июня 2019 г.

Picasso, русские символы в названии картинки

У меня есть адаптер, который должен брать адрес картинки с объекта класса и передавать его в метод Picasso.
Но дело в том, что картинка имеет адрес с русскими символами, или в пути адреса русские символы, поэтому Picasso не хочет её грузить, как я понял. Какие пути решения можно использовать?
В пути адреса "http://" тоже добавлял, не помогло. Другие картинки грузит(проверял закомментированной строкой)
URLDecoder и URLEncoder уже методом тыка начал использовать, думал в другой кодировке сработает, нет, не сработало =(
GIF формат вроде бы поддерживается Picasso, поэтому не грешу на расширение картинки
public View getView(int position, View convertView, ViewGroup parent) { // LayoutInflater vi = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); // 3 обязательные строки при создании Array адаптера View newView = vi.inflate(R.layout.item_news, parent, false); // (в Cursor адаптере метод bindview)
TextView tv1 = (TextView) newView.findViewById(R.id.textListViewZagolovok); TextView tv2 = (TextView) newView.findViewById(R.id.textListViewOpisanie); ImageView imv = (ImageView) newView.findViewById(R.id.imageListViewNovosti); String url = abc.get(position).image; // String url = "https://i.ytimg.com/vi/-DRziE7lYsk/hqdefault.jpg"; Log.e("pic in adapter", url); tv1.setText(abc.get(position).title); tv2.setText(abc.get(position).content);
try{ // вот здесь косячит Picasso.with(context).load(URLEncoder.encode(url)).placeholder(R.drawable.headeronmenu).error(R.drawable.krest).into(imv); Log.e("encode", "0 " + url); Log.e("encode", "1 " + URLEncoder.encode(url, "UTF-8")); Log.e("encode", "2 " + URLDecoder.decode(url, "UTF-8"));
}catch (UnsupportedEncodingException e){ e.printStackTrace(); }
if(position == abc.size()-4 && !flagDow){ flagDow = true; downNextPage.startDowNextPage(); }
return newView; }
Логи:
03-24 10:42:55.525 21687-21687/ru.diitcenter.lakdistrict E/pic in adapter: gazikumuh.ru/images/2016/ЦиркХури.gif 03-24 10:42:55.640 21687-21687/ru.diitcenter.lakdistrict E/encode: 0 gazikumuh.ru/images/2016/ЦиркХури.gif 03-24 10:42:55.645 21687-21687/ru.diitcenter.lakdistrict E/encode: 1 gazikumuh.ru%2Fimages%2F2016%2F%D0%A6%D0%B8%D1%80%D0%BA%D0%A5%D1%83%D1%80%D0%B8.gif 03-24 10:42:55.645 21687-21687/ru.diitcenter.lakdistrict E/encode: 2 gazikumuh.ru/images/2016/ЦиркХури.gif 03-24 10:42:55.720 21687-21687/ru.diitcenter.lakdistrict E/pic in adapter: gazikumuh.ru/images/2016/КурклиКультура.gif 03-24 10:42:55.720 21687-21687/ru.diitcenter.lakdistrict E/encode: 0 gazikumuh.ru/images/2016/КурклиКультура.gif 03-24 10:42:55.725 21687-21687/ru.diitcenter.lakdistrict E/encode: 1 gazikumuh.ru%2Fimages%2F2016%2F%D0%9A%D1%83%D1%80%D0%BA%D0%BB%D0%B8%D0%9A%D1%83%D0%BB%D1%8C%D1%82%D1%83%D1%80%D0%B0.gif 03-24 10:42:55.725 21687-21687/ru.diitcenter.lakdistrict E/encode: 2 gazikumuh.ru/images/2016/КурклиКультура.gif 03-24 10:43:00.760 21687-21687/ru.diitcenter.lakdistrict E/111: AboutNewsActivity.url = gazikumuh.ru/images/2016/ЦиркХури.gif
(Картинки в браузере открываются)


Ответ

При помощи ссылок ниже, сделал метод
[https://stackoverflow.com/questions/9366742/android-regular-expression-return-matched-string ]
[http://www.javaportal.ru/java/articles/regexp.html ]
public String convertUrl(String url){ Pattern p = Pattern.compile("[А-я]+_+[А-я]+_[А-я]+|[А-я]+_+[А-я]+|[А-я]+-+[А-я]+-+[А-я]+|[А-я]+-+[А-я]+|[А-я]+[0-9]+[А-я]+|[0-9]+[А-я]+|[А-я]+"); Matcher m = p.matcher(url); if(m.find()) { Log.e("regular", m.group(0)); String s = m.group(0);
try { Log.e("regula2", URLEncoder.encode(s, "UTF-8")); return url.replace(s, URLEncoder.encode(s, "UTF-8")); } catch (UnsupportedEncodingException e) {
} } return url; }
Он переводит названия, в которых есть символы типа
http://gazikumuh.ru/images/2016/Прием_граждан_в.jpg http://gazikumuh.ru/images/2016/Прием_граждан.jpg http://gazikumuh.ru/images/2016/первый-второй-третий.jpg http://gazikumuh.ru/images/2016/первый-второй.jpg http://gazikumuh.ru/images/2016/первый0886796второй.jpg http://gazikumuh.ru/images/2016/0886796текст.gif http://gazikumuh.ru/images/2016/текст.gif
Где "[А-я]" это 1 русский символ, "+" это свойство множества
"[А-я]+" набор русских символов
"[А-я]+_+[А-я]+" это слово_слово или слово______слово
Мои условия разделяются символом " | " и если 1е условие не выполнится, произойдёт переход на второе условие и так далее.
Спасибо людям, оставившим комменты, я использовал их советы

Комментариев нет:

Отправить комментарий