0

你好 Android 程序员

问题

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

意图

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

为此,我在 Fragment 中使用了 AsyncTask。

遇到的问题

我遇到的问题是如何正确实现通用图像加载器

方法

到目前为止,我所做的是将 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"<application ...XML 文件的标记中来编辑 Android Manifest XML。我没有将它添加为活动。我添加它只是作为一个名字。

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

imageLoader.loadImage(imageURL, ImageView)

这里的问题是,我不能在 doInBackground 方法中使用它,因为我不能在那里更改布局。所以我必须在 onPostExecute 方法中这样做,但我遇到了问题。所以我想听听关于如何在 Android 中结合使用这个 Universal Image Loader 和 AsyncTask 的解决方案。

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

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

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

4

1 回答 1

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();

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

于 2013-10-28T10:38:51.463 回答