第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定

開發(fā)一個好項目:六、創(chuàng)建數(shù)據(jù)源,創(chuàng)建數(shù)據(jù)倉庫

標簽:
Android

前一篇文章:开发一个好项目:五、创建数据源,创建网络数据Service和网络数据源 框架地址 dileber android框架 希望大家能多多star一下

如下是BaseRepository 包含有三个常用属性

localDataSource 本地源
remoteDataSource 网络源
cache 缓存 缓存的开启,与项目代码的的状态有关系,如果 BaseConfiger 类中的bug设置为true 缓存则不开启,当设置为false的时候,缓存将开启。refCache 则是是否刷新缓存的标识
还有三个方法
refOver 刷新结束
refStart 刷新开始 每次调用完后必须再调用结束。
isRefCache 是否刷新

    protected T1 localDataSource = null;

    protected T2 remoteDataSource = null;

    protected Map<String,Object> cache = null;
    /**
     * 是否刷新缓存
     */
    private boolean refCache = false;

public void refOver(){
        refCache = false;
    }

    public void refStart(){
        refCache = true;
    }

    public boolean isRefCache(){
        return refCache;
    }

如下便是SysRepository 主要代码
如果想要做内存缓存的话(缓存会提高效率)

if(cache==null){
            cache = new HashMap<>();
        }
        cache.put(LAUNCH,launchModel);

如果想做文件缓存的话,就会采用两种,一种是,shareprefer,另外一种是数据库,当然数据库的缓存和shareprefer的缓存都在本地数据源处理了,我们只需要做的是,如何取到。 这个的应用场景很常见(我举例子说明一下:微博类应用,你打开微博应用的时候有时候不联网,微博应用出来的是你最后一次浏览的数据。)

如何实现呢?就要在数据仓库里进行操作了:

如下代码逻辑解释:如果本地数据源里有数据则从本地数据源获取数据,如果没有的话,才从网络获取。当从网络获取到的时候,再把本地数据源的数据更新,或者添加。你的应用在没有联网的时候就也可以获取数据了,当然如果要是想刷新数据的话就要用到 :
refOver 刷新结束
refStart 刷新开始
两个方法了

localDataSource.getLaunch(new BaseDataSource.BaseCallback<LaunchModel>() {
                @Override
                public void onSuccess(LaunchModel launchModel) {
                    saveLaunch(launchModel);
                    callback.onSuccess(launchModel);
                }

                @Override
                public void onFailure(DataSourceException e) {
                    remoteDataSource.getLaunch(new BaseCallback<LaunchModel>() {
                        @Override
                        public void onSuccess(LaunchModel launchModel) {
                            saveLaunch(launchModel);
                            callback.onSuccess(launchModel);
                        }

                        @Override
                        public void onFailure(DataSourceException e) {
                            callback.onFailure(e);
                        }
                    });
                }
            });
        }

总代码:

public class SysRepository extends BaseRepository<SysLocalDataSource,SysRemoteDataSource> implements SysDataSource{

    protected SysRepository(SysLocalDataSource localDataSource, SysRemoteDataSource remoteDataSource) {
        super(localDataSource, remoteDataSource);
    }

    public static volatile SysRepository instance;

    public static SysRepository getInstance() {
        if (instance == null) {
            synchronized (SysRepository.class) {
                if (instance == null) {
                    instance = new SysRepository(SysLocalDataSource.getInstance(), SysRemoteDataSource.getInstance());
                }
            }
        }
        return instance;
    }

    @Override
    public void launch(BaseDataSource.BaseCallback<LaunchWrapper> callback) {
        remoteDataSource.launch(callback);
    }

    private static final String LAUNCH = "launch";

    @Override
    public void saveLaunch(LaunchModel launchModel) {
        if(cache==null){
            cache = new HashMap<>();
        }
        cache.put(LAUNCH,launchModel);
        localDataSource.saveLaunch(launchModel);
    }

    @Override
    public void getLaunch(final BaseDataSource.BaseCallback<LaunchModel> callback) {
        if(cache!=null&&cache.containsKey(LAUNCH)){
            callback.onSuccess((LaunchModel) cache.get(LAUNCH));
        }else{
            localDataSource.getLaunch(new BaseDataSource.BaseCallback<LaunchModel>() {
                @Override
                public void onSuccess(LaunchModel launchModel) {
                    saveLaunch(launchModel);
                    callback.onSuccess(launchModel);
                }

                @Override
                public void onFailure(DataSourceException e) {
                    remoteDataSource.getLaunch(new BaseCallback<LaunchModel>() {
                        @Override
                        public void onSuccess(LaunchModel launchModel) {
                            saveLaunch(launchModel);
                            callback.onSuccess(launchModel);
                        }

                        @Override
                        public void onFailure(DataSourceException e) {
                            callback.onFailure(e);
                        }
                    });
                }
            });
        }
    }
點擊查看更多內容
1人點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優(yōu)質文章

正在加載中
感謝您的支持,我會繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優(yōu)惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號

舉報

0/150
提交
取消