原演示地址

本文内容

  • 环境
  • 演示 LazyList 从网络获取图片并缓存
  • 参考资料

本文是 Github 上的一个演示,通过网络获取歌手专辑的缩略图,并显示在 ListView 控件中。该演示具备将缩略图缓存到手机外存的功能,所以叫“Lazy”,这样就不用每次都通过网络重新获取。在学习这个演示前,希望你对 Android 的 Adpater 相关有一定的了解。

该演示仅仅是获得缩略图,但在另一篇文章中,另一个作者根据这个 LazyList,又做了一个相对完整的演示(包括歌曲名称、歌手名、时长、缩略图等信息),像图 3 所示。

环境


  • Windows 2008 R2 64 位
  • Eclipse ADT V22.6.2,Android 4.4.3
  • 三星 SM-G3508,Android OS 4.1

演示 LazyList 从网络获取图片并缓存


Github上的演示只有一个 Java 包,但我重新划分了一下,便于理解作者的思路。源代码就不贴了,你点击此处下载。

图 1 项目结构

  • com.fedorvlasov.lazylist.activity 包是主程序。
  • com.fedorvlasov.lazylist.cache 包,负责缓存,包括缓存在外存 FileCache 类和内存 MemoryCache 类。
  • com.fedorvlasov.lazylist.utils 包,负责流操作。
  • com.fedorvlasov.lazylist.view 包,负责从网络获取歌手专辑的缩略图,并在 ListView 显示,同时对缩略图进行缓存。如果缩略图已缓存,则 ListView 从缓存获取并显示,否则,从网络获取。 核心部分是,LazyAdapter 类,它继承 BaseAdapter,返回 View,即 ListView 中的每行;ImageLoader 类,负责从网络获得缩略图。

图 2 左:主程序,从网络获得缩略图;右:点击“Clear Cache”清除缓存重新加载

如图 2 左边所示,是主程序,从网络获得缩略图并显示。当点击“Clear Cache”按钮后,程序会清除缓存,重新加载并显示缩略图,如图 2 右边所示,有显示出歌手缩略图的,还有没显示出的,没有显示出来的,是正在从网络获取~

图 3 网络获取音乐列表

这是另一个相对完整的演示,点击此处下载,这个演示是在 LazyList 基础完成的,但有 bug,程序不太稳定,程序的运行不是每次都能显示出列表,即便显示出来,缩略图却显示不出来,还没搞清楚是怎么回事(老外写的东西,有时也不太靠谱),其中一个 bug 是因为版本较低,而 Android 4.0 以上的版本不允许在主线程访问网络,你可以试试,要是弄明白了,麻烦您告诉我一下~

参考资料


这三个链接的关系是,第二个链接的演示是根据第一个链接完成的,第三个链接翻译的第二个链接。

下载 LazyList Demo

下载 LazyList Demo v.1.1

下载 CompleteLazyList Demo

下载 CompleteLazyList Demo v.2.0

Android LazyList 从网络获取图片并缓存的更多相关文章

  1. Android ListView从网络获取图片及文字显示

    上一篇文章说的是ListView展示本地的图片以及文本,这一篇说一下如何从网络获取图片以及文本来显示.事实上,一般是先获取Josn或sml数据,然后解释显示.我们先从网上获取xml,然后对其进行解析, ...

  2. Android 将从网络获取的数据缓存到私有文件

    1:activity_main.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/androi ...

  3. Android 通过网络获取图片的源码

    将开发过程中经常用到的内容做个备份,如下的资料是关于Android 通过网络获取图片的的内容. package com.netimg; import android.app.Activity;impo ...

  4. Android热身:通过网络获取资源并更新UI组件

    Android热身:通过网络获取资源并更新UI组件 目标 点击"发送请求"按钮,下载某网页的html源码,并显示在TextView控件上:点击"清空",清除Te ...

  5. android通过BitmapFactory.decodeFile获取图片bitmap报内存溢出的解决办法

    android通过BitmapFactory.decodeFile获取图片bitmap报内存溢出的解决办法 原方法: public static Bitmap getSmallBitmap(Strin ...

  6. Android相机、相册获取图片显示并保存到SD卡

    Android相机.相册获取图片显示并保存到SD卡 [复制链接]   电梯直达 楼主    发表于 2013-3-13 19:51:43 | 只看该作者 |只看大图  本帖最后由 happy小妖同学 ...

  7. android ViewPager实现的轮播图广告自定义视图,网络获取图片和数据

    public class SlideShowAdView extends FrameLayout { //轮播图图片数量    private static int IMAGE_COUNT = 3;  ...

  8. Android中高效的显示图片之三——缓存图片

    加载一张图片到UI相对比较简单,如果一次要加载一组图片,就会变得麻烦很多.像ListView,GridView,ViewPager等控件,需要显示的图片和将要显示的图片数量可能会很大. 为了减少内存使 ...

  9. Android从相册中获取图片以及路径

    首先是相册图片的获取: private final String IMAGE_TYPE = "image/*"; private final int IMAGE_CODE = 0; ...

随机推荐

  1. Java -verbose[:class|gc|jni] 转 ----JAVA源码分析

    http://blog.csdn.net/tenderhearted/article/details/39642275 http://www.cnblogs.com/iceAeterNa/p/4876 ...

  2. delphi shr和shl的作用

    x:=x shl 1 二进制数向左移1位,尾部补1个零,相当于x:=x*2;x:=x shl 2 二进制数向左移2位,尾部补2个零,相当于x:=x*4;...x:=x shl n 二进制数向左移n位, ...

  3. [Winform]默认以管理员身份运行程序

    摘要 在使用setupfactory打包之后,想让程序默认以管理员身份运行,因为涉及到创建文件删除文件的操作,如果权限比较低的话,会出现没有权限操作的bug. 解决办法 在项目中找到app.manif ...

  4. C++中的vector&find_if

     <STL應用> vector & find_if 看到有人問有個名為C的struct如下 code: struct C { int v1; int v2; }; 應用在vecto ...

  5. TF400511: Your team has not defined any iterations to use as sprints

    tfs里面的冲刺对于开发团队来说, 是非常重要的一个功能,是团队开发进度的晴雨表: 但是如果从此死活出不来,怎么办呢? TF400511:您的团队尚未定义任何要用作冲刺 (sprint) 的迭代 TF ...

  6. Android Socket通信详解

    一.Socket通信简介  Android与服务器的通信方式主要有两种,一是Http通信,一是Socket通信.两者的最大差异在于,http连接使用的是“请求—响应方式”,即在请求时建立连接通道,当客 ...

  7. git 删除远程分支和本地分支

    删除远程分支和本地分支 https://www.cnblogs.com/luosongchao/p/3408365.html 将远程git仓库里的指定分支拉取到本地(本地不存在的分支) https:/ ...

  8. Java 8新的时间日期库的20个使用示例

    原文链接 作者:Javin Paul 译者:之诸暇 除了lambda表达式,stream以及几个小的改进之外,Java 8还引入了一套全新的时间日期API,在本篇教程中我们将通过几个简单的任务示例来学 ...

  9. LuaJit转义的问题

    之前在项目中,处理类似!30转为表现的字符串时,有人写了这样的一段代码"\![1-2][0-9]",当换成luajit时启动报错了,出错原因在于转义字符使用不对.在很多语言中,正则 ...

  10. WinForm 自动完成控件实例代码简析

    在Web的应用方面有js的插件实现自动完成(或叫智能提示)功能,但在WinForm窗体应用方面就没那么好了. TextBox控件本身是提供了一个自动提示功能,只要用上这三个属性: AutoComple ...