我正在使用自定义Listview和Image适配器以及Universal Image Loader将图像URL加载到异步任务的列表视图中。
问题是网址是Dropbox链接,他们需要很长时间才能将共享网址检索到图片。如果我有30个图像循环并获取URL链接,则需要一分钟才能获得实际的URL。
我希望能够修改我的代码,以便:
因此,iamges将逐个加载,用户会看到图像被加载到列表视图中,并且不需要等待很长时间没有任何事情发生。
以下是目前的doInBackground
:
@Override
protected Boolean doInBackground(DbxFileSystem... params) {
//Opens thumbnails for each image contained in the dropbox folder
try {
DbxFileSystem fileSystem = params[0];
for (DbxFileInfo fileInfo: fileSystem.listFolder(currentPath)) {
String filename = fileInfo.path.getName();
DbxFile file;
try{
if(!fileInfo.isFolder)
{
paths.add(fileInfo.path);
//takes a long time
urls.add(fileSystem.fetchShareLink(fileInfo.path,false).toString());
//can we call the imageadapter here somehow to update with this image?
}
else
{
//must be a folder so add folder icon
urls.add("drawable://" + R.drawable.dbfolder);
paths.add(fileInfo.path);
}
执行后只需:
ImageAdapter adapter = new ImageAdapter(this, urls, paths);
lstView.setAdapter(adapter);
我是否需要另外的Async任务或我应该以什么方式执行此操作? 那么一个Async需要恢复URL和另一个异步任务来加载图像? 你可以从另一个调用一个Aync任务,如果是这样,应该怎么做?
感谢您的帮助
答案 0 :(得分:0)
您可以先从服务器获取所有网址,或在图像之前获取任何其他数据。
我建议你使用Volley库。在列表项膨胀上,异步下载图像。 Volley framework
YourApp.getInstance().getImageLoader()
.get(list.get(position).getImagePath(), ImageLoader.getImageListener(holder.yourImageView, R.drawable.loading, R.drawable.yourDefaultImage));
您需要使用静态变量RequestQueue和ImageLoader扩展您的应用程序类。
您肯定可以在网上找到一些教程。