我正在从 a 下载几个图像和名称Collection
并将它们应用到GridView
. 我在AsyncTask
正常工作时遇到了一些问题。我需要从一个 url 返回两个不同的值,一个图像和名称。目前,我可以正确下载所有内容并将信息应用于我的ImageView
and TextView
,但我这样做的方法仅在我调用它时才有效Adapter
。
问题:
当我设置我AsyncTask
下载所有内容时,它只会将序列的第一个值应用于Views
我的网格中。当我记录“artistImages”时,它会大量打印出该序列的其他 url,我不知道为什么会发生这种情况,但是这些 url 中的数据实际上并没有应用于我的Adapter
.
我试过的:
我已经尝试设置一个循环doInBackground()
来运行我的Iterator
n次。
Boolean
在将序列中第一组的数据应用到我的所有Views
.
我已经尝试Adapter
在我的AsyncTask
.
我已经尝试AsyncTask
在 my 中设置我的Adapter
新课程,而不是创建一个新课程。
我已经尝试将我ImageView
的 inonPostExecute()
和我的Adapter
.
我尝试在我的AsyncTask
.
AsyncTask
我已经尝试为 my设置一个Views
,以便我Iterator
可以正常运行,并且图像和名称是异步应用的。
我已经对停止循环或AsyncTask
在某个点进行了大量研究,AsyncTaks
在 aGridView
或 with an中进行设置,并在,和一般情况下Adapter
进行了更多阅读。Threads
Handlers
AsyncTask
所有这些尝试要么导致仅使用第一组序列,要么根本不下载和应用任何内容。所以,我Iterator
在我的AsyncTask
.
这是我用来下载图像和名称的代码。只要我在getView
my 方法中使用它,它就可以工作Adapter
。
用于下载图像和名称:
i++;
artistImage = Artist.getSimilar("Bon Iver", i, key);
new ArrayList<Artist>();
itr = artistImage.iterator();
while (itr.hasNext()) {
Artist temp = itr.next();
artistImages = ((ImageHolder) temp).getImageURL(ImageSize.MEGA);
artistName = ((MusicEntry) temp).getName();
}
只是为了展示一切:
private Iterator<Artist> itr;
private Collection<Artist> artistImage;
private String artistImages = null;
private String artistName = null;
private int i = 0;
AsyncTask:我在getView
我的Adapter
.new loadImages().execute()
public class loadImages extends AsyncTask<String, Integer, String> {
@Override
protected String doInBackground(String... params) {
try {
Thread.sleep(50);
for (int i = 0; i <= 10; i++) {
artistImage = Artist.getSimilar("Bon Iver", i, key);
new ArrayList<Artist>();
itr = artistImage.iterator();
while (itr.hasNext()) {
Artist temp = itr.next();
artistImages = ((ImageHolder) temp)
.getImageURL(ImageSize.MEGA);
artistName = ((MusicEntry) temp).getName();
}
}
} catch (Exception e) {
Log.i("images", e.getMessage());
}
return artistImages;
}
}
所以,我不确定如何正确设置它,是时候寻求帮助了。在经历了相当多的失败尝试之后,从好的方面来说,我学到了很多关于让我的应用程序更高效的知识。我会很感激一些建议。