0

こんにちは仲間の Android コーダー

問題

50枚の画像をダウンロードする必要があります。問題は、ユーザーがダウンロード中にアプリを使用できず、ユーザー エクスペリエンスが悪いことです。

目的

アプリの使用中に Universal Image Loader を使用して画像をダウンロードするのは良い考えだと思いました。私が今抱えている問題は、AsyncTask と一緒に使用する方法がわからないことです。AsyncTask を使用しているのは、最初の 10 個の結果のみをロードし、ユーザーがコードの最後までスクロールすると、次の 10 個の結果がロードされるためです。

そのために、フラグメント内で AsyncTask を使用しています。

問題発生

私が直面している問題は、Universal Image Loader を正しく実装する方法です。

アプローチ

ここまでで行ったことは、ImageLoader ライブラリを libs に追加し、ライブラリとして追加することです。次に、このコンテンツで新しいクラスを作成しました

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 マニフェスト XML も編集します。アクティビティとして追加しませんでした。名前だけ付けました。

しかし今、私は問題に直面しています。ドキュメントには、正しく理解していればそのように使用するように記載されています

imageLoader.loadImage(imageURL, ImageView)

ここでの問題は、レイアウトを変更できないため、 doInBackground メソッドでこれを使用できないことです。したがって、onPostExecute メソッドでそれを行う必要がありますが、問題が発生しています。したがって、この Universal Image Loader を Android で AsyncTask と組み合わせて使用​​する方法についての解決策を聞きたいと思います。

前述したように、ライブラリを含め、Android マニフェスト ファイルを編集し、アプリケーションのクラスを作成しました。しかし、今はどうですか?

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 に答える