将Universal Image Loader与AsyncTask结合使用

时间:2013-10-28 09:27:25

标签: java android android-fragments android-asynctask universal-image-loader

你好Android编码员

问题

我需要下载50张图片。问题是,用户在下载时无法使用该应用程序,这对用户的体验不利。

意图

我认为在使用应用程序时使用Universal Image Loader下载图像会是一个好主意。我现在遇到的问题是我不知道如何与AsyncTask一起使用它。我正在使用AsyncTask,因为我只加载前10个结果然后,当用户滚动到代码的末尾时,它会加载下10个结果。

我在片段中使用了AsyncTask。

遇到问题

我遇到的问题是如何正确实现Universal Image Loader

方法

到目前为止,我所做的是将ImageLoader库添加到库中并将其添加为库。然后,我创建了一个包含此内容的新类

package de.activevalue.ttflies;

import android.app.Application;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
/**
 * Created with IntelliJ IDEA.
 * User: pan
 * Date: 28.10.13
 * Time: 10:11
 * To change this template use File | Settings | File Templates.
 */
public class MyApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();

        // Create global configuration and initialize ImageLoader with this configuration
        ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(getApplicationContext()).build();
        ImageLoader.getInstance().init(config);
    }
}

然后,我还通过将此行android:name=".MyApplication"添加到XML文件的<application ...标记中来编辑Android Manifest XML。我没有把它添加为活动。我把它添加为一个名字。

但现在我遇到了一个问题。如果我理解正确的话,文档就说明要使用它

imageLoader.loadImage(imageURL, ImageView)

这里的问题是,我不能在doInBackground方法中使用它,因为我无法在那里更改布局。所以我必须在onPostExecute方法中这样做,但我遇到了问题。所以我想听听如何将这个通用图像加载器与Android中的AsyncTask结合使用的解决方案。

正如我所说,我包含了库,编辑了Android Manifest文件并为Application创建了一个类。但现在呢?

我在片段的onCreate方法中放了什么?我在哪里初始化imageLoader?我真的不知道在我的班级/片段中做什么,我需要imageLoader。

关于如何解决这个问题的任何建议?

1 个答案:

答案 0 :(得分:0)

这是我的应用程序类:

public class UILApplication extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        initImageLoader(getApplicationContext());
    }

    public static void initImageLoader(Context context) {
        // This configuration tuning is custom. You can tune every option, you
        // may tune some of them,
        // or you can create default configuration by
        // ImageLoaderConfiguration.createDefault(this);
        // method.
        ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(
                context).threadPriority(Thread.NORM_PRIORITY - 2)
                .denyCacheImageMultipleSizesInMemory()
                .discCacheFileNameGenerator(new Md5FileNameGenerator())
                .tasksProcessingOrder(QueueProcessingType.LIFO)
                .writeDebugLogs() // Remove for release app
                .build();
        // Initialize ImageLoader with configuration.
        ImageLoader.getInstance().init(config);
    }

//我的活动:

图像加载器的创建对象:

private ImageLoader imageLoader = null;

我正在更新处理程序中的UI,如下所示:

Handler mHandler = new Handler() {

        public void handleMessage(android.os.Message msg) {
            switch (msg.what) {
            case SET_ADAPTER:
imageLoader.displayImage(my URL, ImageView to show , Utils.options);


mHandler.removeMessages(SET_ADAPTER);
                break;
            default:
                break;
            }
        };
    };

最后是我的Utils课程。选项是,

public static DisplayImageOptions options = new DisplayImageOptions.Builder()
            .cacheInMemory(true).cacheOnDisc(true)
            .bitmapConfig(Bitmap.Config.RGB_565).build();

这对我来说很好。通用图像加载器提供了如此高质量的图像而不是其他库。