Picasso в цикле for загружает только одно изображение

#android #android-asynctask #picasso

#Android #android-asynctask #picasso

Вопрос:

Я использую picasso для загрузки нескольких изображений, которые анализируются из веб-сервиса… проблема в том, что у меня есть несколько элементов, но только последний элемент загружается и загружается в нужное представление… вот часть моего кода, которая обрабатывает заполнение элементов:

 public void populate_jobs(ArrayList<RowItem> jobs)
{
    LinearLayout ll_parent = (LinearLayout) findViewById(R.id.list_container);
    for(int i = 0;i < jobs.size();i =3)
    {
        RowItem item_first = jobs.get(i);
        _items.add(item_first);
        RowItem item_second = null;
        RowItem item_third = null;
        if(jobs.size() > i 1)
        {
            item_second = jobs.get(i 1);
            _items.add(item_second);
        }
        if(jobs.size() > i 2)
        {
            item_third = jobs.get(i 2);
            _items.add(item_third);
        }
        LinearLayout ll = new LinearLayout(this);
        LinearLayout.LayoutParams lp = new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);
        ll.setGravity(Gravity.CENTER);
        ll.setLayoutParams(lp);
        ll.setOrientation(LinearLayout.HORIZONTAL);

        LinearLayout.LayoutParams lp_btn = new LayoutParams(convertToPx(100), convertToPx(100));
        lp_btn.setMargins(convertToPx(5), convertToPx(5), convertToPx(5), convertToPx(5));
        ImageButton btn_first = new ImageButton(this);
        btn_first.setLayoutParams(lp_btn);
        btn_first.setId(item_first.getId());

        //getImagesAsyncTask img_first = new getImagesAsyncTask(item_first.getImageSrc(), btn_first, this);
        //img_first.execute();
        Picasso.with(this)
        .load(item_first.getImageSrc().replace("~", URL_IAMGES))
        .fit()
        .into(btn_first, new Callback() {

            @Override
            public void onSuccess() {
                String s = "asd";
            }

            @Override
            public void onError() {
            }
        });
        btn_first.setOnClickListener(this);
        ll.addView(btn_first);

        if(item_second != null)
        {
            ImageButton btn_second = new ImageButton(this);
            btn_second.setLayoutParams(lp_btn);
            btn_second.setId(item_second.getId());

            //getImagesAsyncTask img_second = new getImagesAsyncTask(item_second.getImageSrc(), btn_second, this);
            //img_second.execute();

            Picasso.with(this)
            .load(item_second.getImageSrc().replace("~", URL_IAMGES))
            .fit()
            .into(btn_second, new Callback() {

                @Override
                public void onSuccess() {
                    String s = "asd";
                }

                @Override
                public void onError() {
                }
            });
            btn_second.setOnClickListener(this);
            ll.addView(btn_second);
        }

        if(item_third != null)
        {
            ImageButton btn_third = new ImageButton(this);
            btn_third.setLayoutParams(lp_btn);
            btn_third.setId(item_third.getId());
            //getImagesAsyncTask img_second = new getImagesAsyncTask(item_third.getImageSrc(), btn_third, this);
            //img_second.execute();

            Picasso.with(this)
            .load(item_third.getImageSrc().replace("~", URL_IAMGES))
            .fit()
            .into(btn_third, new Callback() {

                @Override
                public void onSuccess() {
                    String s = "asd";
                }

                @Override
                public void onError() {
                }
            }
                );
            btn_third.setOnClickListener(this);
            ll.addView(btn_third);
        }
        ll_parent.addView(ll);
    }
}
  

Я вызываю функцию этого цикла for в функции onPostExecute моей asynctask, которая отвечает за извлечение данных json из веб-сервиса. Содержимое источника изображения для всех изображений правильное и доступно через браузер, в чем может быть причина? заранее спасибо

РЕДАКТИРОВАТЬ: как я проверил, кажется, что он загружает только 1 конкретное изображение, а не последнее.

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

1. пожалуйста, отправьте полный код

2. 1. Вам необходимо опубликовать полный код цикла.

3. обновлена и добавлена вся функция, она была вызвана в onPostExecute

4. Picasso загружает изображения (сколько примерно?) С URL-адресов и помещает их в ImageButton. Это то, что вы хотите. Вы делаете это, создавая макеты на лету и добавляя три кнопки ImageButtons к каждому макету. Наконец, макет привязывается к существующему макету. ВЫ должны были сказать это !!. Если все сделано, то сколько кнопок вы видите с изображением? Все то же изображение? Пожалуйста, будьте более понятны. Сколько раз вызывается onSucces() ? И сколько onError()?

5. Пожалуйста, уточните RowItem:getImageSrc().replace("~", URL_IAMGES)) . Что делается с помощью этой функции? URL_IAMGES не будет ли один и тот же URL для всех изображений?

Ответ №1:

Url кодирует URL. Или замените пробелы на .

Ответ №2:

Хорошо, я нашел его, URL-адрес содержал пробелы (благодаря дизайнеру, который создал изображения), поэтому из-за этого picasso не удалось загрузить изображения, о которых я не знал, что они не обрабатывают пробелы в URL. в любом случае, спасибо greenapps за его помощь.

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

1. Url кодирует URL. Или замените пробелы на .

2. да, я уже это сделал, в любом случае спасибо за вашу пошаговую помощь