У меня есть адаптер, который должен брать адрес картинки с объекта класса и передавать его в метод 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е условие не выполнится, произойдёт переход на второе условие и так далее.
Спасибо людям, оставившим комменты, я использовал их советы
Комментариев нет:
Отправить комментарий