Страницы

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

суббота, 4 апреля 2020 г.

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

#android #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


(Картинки в браузере открываются)
    


Ответы

Ответ 1



Вот тут вроде помогли с конвертацией =) используя URI Uri.encode(url);

Ответ 2



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

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

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