关于使用ACache缓存List数据的问题
最近在做app的缓存,所以看了一下现有的缓存框架,比较了http://www.nohttp.net,https://github.com/jeasonlzy/okhttp-OkGo等几个框架,最后选择了一个比较简单的框架ACache。之所以选择这个框架是因为我现在使用的是RxJava + Retrofit ,再添加以上两个框架,我觉得有一点冗余。而ACache就很简单,因为只有一个类,非常的轻量级。
ACache的使用我这里就不多说了,网上也有很多使用方法,源码分析。我只想说一下使用这个框架缓存List的问题。因为官方demo并没有详细说明。
首先在OnCreate方法内获取实例:ACache aCache = ACache.get(mContext);
在获取到数据后将数据保存:list数据使用的是它的子类ArrayList。
arrayList = new ArrayList();
我这里是我的应用的轮播图的数据。注意:banner是一个实体类,这个实体类需要序列化,这里有一个小小的坑,就是ACache实现的是Serializable,而我直接用的androidstudio提供的工具parcelable,将实体类实现了parcelable接口,但是在保存数据的时候,app会崩溃。这里会显示一个空的引用的错误。这里不贴具体的错误日志了
arrayList.addAll(banner);
aCache.put("banner", arrayList,aCache.TIME_DAY);
这里贴上我app中保存数据的完整代码:
private SubscriberOnNextListener<List<Banner>> bannerSubscriberOnNextListener = new SubscriberOnNextListener<List<Banner>>() {
@Override
public void onNext(List<Banner> banners) {
banner = banners;
arrayList = new ArrayList();
if(banner != null){
arrayList.addAll(banner);
aCache.put("banner", arrayList,aCache.TIME_DAY);
}
size = banners.size();
initBannerData(banners);
isSuccess = true;
}
};
数据保存完,在使用时就需要去获取数据:
//使用getAsObject(),直接进行强转
arrayList2 = (ArrayList<Banner>) aCache.getAsObject("banner");
if(arrayList2 == null){
HttpMethods.getInstance().getBannerv2(new ProgressSubscriber<List<Banner>>(bannerSubscriberOnNextListener, getActivity()), 3);
}else{
initBannerData(arrayList2);
}
可以看到这几段代码就是在调用接口前从缓存读取数据,如果有就直接使用,没有重新调用接口。
ACache使用起来还是很简单的,而且还很轻量级。基本我的应用的所有数据都可以用ACache来进行缓存。
第二篇文档写完了,大家吐槽。我现在写博客是希望能够记录一下工作中遇到的问题与大家分享,这样对我自己的写作能力,交流能力,和技术提升都有一定的好处。