0

私はコードを求めているわけではありません。問題にアプローチするためのガイダンスが必要なだけです。私は Android が初めてで、Google Images API から JSON を解析して特定のキーワードの画像の URL リンクを取得する小さなプロジェクトを行っています。JSON を正常に解析し、ListView + ArrayAdapter を作成し、Listview に各 URL を表示するところまで来ました。次に、これらのリンクを画像に変換し (ビットマップを使用すると思います)、Listview に表示する方法を考え出さなければなりません。画像ごとにディスク容量を消費するため、SD カードにロードするのではなく、キャッシュに保存します。問題は、キャッシュにサードパーティのライブラリを使用できないことです. Google で検索したところ、ほとんどの場合「LazyLoad」や「Universal Image Loader」などが見つかりましたが、残念ながらそれらは公式ではなくサードパーティのようです。Android Developer Web サイトで「LruCache」を見つけましたが、私の目的に最適なものはありますか? 問題を解決するために必要な他のオプションを教えてもらえますか?

ありがとうございました!

4

1 に答える 1

1

画像のURLがあります。ワークフロー:

  1. イメージはデバイスに既に存在しますか?
    • もしそうなら、それをメモリに読み込んでください。
    • そうでない場合は、HTTP(S) 経由でダウンロードします。
      • 次に、イメージをディスクのどこかに保存して、次回再ダウンロードする必要がないようにします。
  2. この画像を UI に表示します。

これ以上複雑にしないでください。Volley、Univeral Image Loader などのキャッシング メカニズムは、この同じ概念に基づいて構築されるだけであり、達成したい/必要とするものには不要な場合があります。これを非常に明確な方法で正確に実行する単純なアプリ用に私が書いた (少し古いですが) コードを次に示します。

if (!doesCacheFileExist(ctx, filename))
{
    Log.d(TAG, "No cache exists. Downloading.");
    URL url = new URL(uri);

    HttpURLConnection con = (HttpURLConnection) url.openConnection();

    Bitmap b = BitmapFactory.decodeStream(con.getInputStream());

    b = postProcessBitmap(b);

    cacheBitmap(ctx, b, filename);

    return b;
}
else
{
    Log.d(TAG, "Found cached file.");
    return getCachedBitmap(ctx, filename);
}

完全なコードはここで見ることができます: https://github.com/zaventh/smartsquare/blob/develop/src/com/steelthorn/android/watch/smartsquare/Util.java#L48

于 2014-11-01T05:22:22.980 に答える