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

Я использую 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 моей асинхронной задачи, которая отвечает за получение данных json из веб-сервиса. Содержимое источника изображения для всех изображений правильное и доступно через браузер, в чем может быть причина? заранее спасибо

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


person arash moeen    schedule 30.06.2014    source источник
comment
пожалуйста, опубликуйте полный код   -  person Sainath Patwary karnate    schedule 30.06.2014
comment
+1. Вам нужно опубликовать полный код цикла.   -  person greenapps    schedule 30.06.2014
comment
обновил и добавил всю функцию, она вызывалась в onPostExecute   -  person arash moeen    schedule 30.06.2014
comment
Picasso загружает изображения (насколько?) с URL-адресов и размещает их в ImageButton. Это то, что ты хочешь. Вы делаете это, создавая макеты на лету и добавляя три кнопки ImageButton в каждый макет. Наконец макет прикрепляется к существующему макету. ВЫ должны были сказать это!!. Если все сделано, то сколько кнопок вы видите с изображением? Все тот же образ? Пожалуйста, будьте более ясны. Сколько раз вызывается onSucces()? А сколько onError()?   -  person greenapps    schedule 30.06.2014
comment
Пожалуйста, уточните RowItem:getImageSrc().replace("~", URL_IAMGES)). Что делает эта функция? URL_IAMGES не будет одинаковым URL для всех изображений?   -  person greenapps    schedule 30.06.2014
comment
@greenapps да, извините за неясность, это около 30 изображений, каждое около 5 КБ, поэтому в итоге будет 30 кнопок, только одна из которых будет иметь изображение, onSuccess также вызывается один раз, а для onError нет.   -  person arash moeen    schedule 30.06.2014
comment
@greenapps изображения хранятся как ~/path/to/image.jpg, поэтому в основном я заменяю ~ доменом, URL_IMAGES — это доменное имя, частью которого является веб-сервис, и URL-адрес результата не совпадает для всех изображений.   -  person arash moeen    schedule 30.06.2014
comment
В порядке. Пожалуйста, ответьте также, сколько изображений вы видите в кнопках. И лучше переименуйте URL_IMAGES в BASE_URL_IMAGES.   -  person greenapps    schedule 30.06.2014
comment
В порядке. Виден только один. Это для последней кнопки? Первый? Всегда одно и то же?   -  person greenapps    schedule 30.06.2014
comment
Из всех 30 изображений загружается только 1 изображение, и это всегда одно и то же изображение, и оно не первое и не последнее, а 20-е изображение, остальные кнопки пусты. Насчет переименования, да, это имеет больше смысла.   -  person arash moeen    schedule 30.06.2014
comment
В последнем ряду тоже три кнопки? Является ли 20-й средний одним из трех подряд?   -  person greenapps    schedule 30.06.2014
comment
это 2 кнопки, вероятно, потому что список обновляется из другого источника, несколько часов назад было 30, но сейчас 32, но раньше, когда я задавал этот вопрос, их было 30 и было 3 кнопки внизу   -  person arash moeen    schedule 30.06.2014
comment
Пожалуйста, сделайте тест, в котором вы выйдете из цикла после того, как сделаете девять URL-адресов. Повторить с тремя. Можно даже попробовать с одной кнопкой.   -  person greenapps    schedule 30.06.2014
comment
хорошо, у меня есть что-то новое и довольно странное, теперь вызывается моя функция onError, есть ли способ получить сообщение об ошибке?   -  person arash moeen    schedule 30.06.2014
comment
Я не знаю. Но поместите в него оператор журнала, в котором вы регистрируете i и используемый URL-адрес. Picasso.with(this), где this должен быть контекстом. Это то же самое, что и для макетов?   -  person greenapps    schedule 30.06.2014
comment
да, контекст тот же, я проверил URL-адрес img, и он доступен через браузер, все вроде нормально, но вызывает onError, ну, по крайней мере, я каким-то образом знаю, где это происходит.   -  person arash moeen    schedule 30.06.2014
comment
Давайте продолжим обсуждение в чате.   -  person arash moeen    schedule 01.07.2014


Ответы (2)


URL-адрес кодирует URL-адрес. Или замените пробелы на %20.

person greenapps    schedule 30.06.2014

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

person arash moeen    schedule 30.06.2014
comment
URL-адрес кодирует URL-адрес. Или замените пробелы на %20. - person greenapps; 30.06.2014
comment
да уже сделал это, все равно спасибо за пошаговую помощь - person arash moeen; 30.06.2014