关于使用ACache缓存List数据的问题

最近在做app的缓存,所以看了一下现有的缓存框架,比较了http://www.nohttp.nethttps://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来进行缓存。

第二篇文档写完了,大家吐槽。我现在写博客是希望能够记录一下工作中遇到的问题与大家分享,这样对我自己的写作能力,交流能力,和技术提升都有一定的好处。