0

我不是要代码,我只需要一些关于解决问题的指导。我是 Android 新手,我正在做一个小项目,我从 Google 图片 API 解析 JSON 以获取某个关键字的图片的 url 链接。我已经成功解析了 JSON,创建了一个 ListView + ArrayAdapter,并在 Listview 中显示了每个 URL。现在我必须弄清楚如何将这些链接变成图像(我认为使用位图),并将它们显示在 Listview 中。我不想将它们加载到 SD 卡,因为这会占用每个图像的磁盘空间,而是将它们存储在缓存中。问题是,我不能使用任何第三方库进行缓存. 我在 Google 上搜索过,大部分都找到了诸如“LazyLoad”和“Universal Image Loader”之类的东西,但不幸的是它们似乎是第三方的,而不是官方的。我在 Android 开发者网站上找到了“LruCache”,但对我来说是最好的吗?你能告诉我还有什么其他的方法可以解决我的问题吗?

谢谢!

4

1 回答 1

1

你有一张图片的网址。工作流程:

  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 回答