Android 毕加索在for循环中只加载一幅图像

Android 毕加索在for循环中只加载一幅图像,android,android-asynctask,picasso,Android,Android Asynctask,Picasso,我正在使用毕加索加载从Web服务解析的几个图像。。。问题是我有多个项目,但只有最后一个项目被下载并加载到所需的视图中。。。下面是我处理填充项目的部分代码: public void populate_jobs(ArrayList<RowItem> jobs) { LinearLayout ll_parent = (LinearLayout) findViewById(R.id.list_container); for(int i = 0;i < jobs.size

我正在使用毕加索加载从Web服务解析的几个图像。。。问题是我有多个项目,但只有最后一个项目被下载并加载到所需的视图中。。。下面是我处理填充项目的部分代码:

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);
    }
}
public void populate_作业(ArrayList作业)
{
LinearLayout ll_parent=(LinearLayout)findViewById(R.id.list_容器);
对于(int i=0;ii+1)
{
item_second=jobs.get(i+1);
_添加(第二项);
}
if(jobs.size()>i+2)
{
第三项=jobs.get(i+2);
_添加(第三项);
}
LinearLayout ll=新的LinearLayout(本);
LinearLayout.LayoutParams lp=新的LayoutParams(LayoutParams.FILL\u父级,LayoutParams.WRAP\u内容);
ll.设置重力(重心);
ll.setLayoutParams(lp);
ll.设置方向(水平线性布局);
LinearLayout.LayoutParams lp_btn=新的布局参数(convertToPx(100),convertToPx(100));
lp_btn.设置边距(convertToPx(5)、convertToPx(5)、convertToPx(5)、convertToPx(5));
ImageButton btn_first=新的ImageButton(此);
btn_first.setLayoutParams(lp_btn);
btn_first.setId(item_first.getId());
//getImagesAsyncTask img_first=新的getImagesAsyncTask(item_first.getImageSrc(),btn_first,this);
//img_first.execute();
毕加索。用(这个)
.load(item_first.getImageSrc().replace(“~”,URL_IAMGES))
.fit()
.into(btn_优先,新回调(){
@凌驾
成功时的公共无效(){
字符串s=“asd”;
}
@凌驾
公开无效{
}
});
btn_first.setOnClickListener(这个);
ll.addView(btn_优先);
如果(第二项!=null)
{
ImageButton btn_second=新的ImageButton(此);
btn_second.setLayoutParams(lp_btn);
btn_second.setId(item_second.getId());
//getImagesAsyncTask img_second=新的getImagesAsyncTask(item_second.getImageSrc(),btn_second,this);
//img_second.execute();
毕加索。用(这个)
.load(项\u second.getImageSrc().replace(“~”,URL\u IAMGES))
.fit()
.into(btn_秒,新回调(){
@凌驾
成功时的公共无效(){
字符串s=“asd”;
}
@凌驾
公开无效{
}
});
btn_second.setOnClickListener(这个);
ll.addView(btn_秒);
}
如果(第三项!=空)
{
ImageButton btn_third=新的ImageButton(此);
btn_第三。设置布局参数(lp_btn);
btn_third.setId(item_third.getId());
//getImagesAsyncTask img_second=新的getImagesAsyncTask(item_third.getImageSrc(),btn_third,this);
//img_second.execute();
毕加索。用(这个)
.load(item\u third.getImageSrc().replace(“~”,URL\u IAMGES))
.fit()
.into(btn_第三,新回调(){
@凌驾
成功时的公共无效(){
字符串s=“asd”;
}
@凌驾
公开无效{
}
}
);
btn_third.setOnClickListener(这个);
ll.addView(btn_第三);
}
ll_parent.addView(ll);
}
}
我正在asynctask的onPostExecute函数中调用这个for循环的函数,该函数负责从webservice获取json数据。所有图像的图像源内容正确,可以通过浏览器访问,原因是什么?提前谢谢


编辑:正如我所检查的,它似乎只加载了一个特定的图像,而不是最后一个。

好的,我发现它,url包含空格(感谢创建图像的设计师),因此,由于毕加索未能下载图像,我不知道它们不处理url中的空格。无论如何,感谢greenapps的帮助。

Url对Url进行编码。或者将空格替换为%20。

请填写完整的代码+1。您需要发布循环的完整代码。更新并添加了整个函数,它是在OnPostExecuteCasso中调用的。Epicasso正在从URL下载图像(大约多少?),并将其放置在ImageButton中。这就是你想要的。您可以动态创建布局,并向每个布局添加三个ImageButton。最后,布局将附着到现有布局。你应该告诉我的!!。如果一切都完成了,那么你在一张图片上看到了多少个按钮?都是一样的图像?请说清楚一点。onSucces()被调用了多少次?以及有多少个OneError()?请详细说明
行项:getImageSrc()。替换(“~”,URL\u IAMGES))
。这个函数做什么<代码>URL\u IAMGES对于所有图像将不是相同的URL?URL编码URL。或者将空格替换为%20。是的,已经这样做了,谢谢您的逐步帮助