安卓开发 第五篇 我的安卓应用架构设计-----Repository类
来源:互联网 发布:sql server 实训报告 编辑:程序博客网 时间:2024/06/04 18:30
Repository类被我放在项目架构中的领域层中(domain), 在我的项目架构中充当的是数据仓库的角色,所有需要的数据都从Repository获取。
先看看所有Repository的基类:
/** * BaseRepository app的数据仓库类的基类,所有Repository类都直接或者间接继承自它 * <p/> * Created by tianlai on 16-3-3. */public abstract class BaseRepository<S> { private static final String TAG="repository"; protected Retrofit retrofit; protected static User user; //用户信息 protected Context mContext;//Context对象,用来判断网络连接 private boolean isCancle=false; protected S service; public BaseRepository(Context context, Retrofit retrofit) { this.mContext = context; this.retrofit = retrofit; service=retrofit.create(getServiceClass()); } /** * 获取网络接口类型 * * @return */ protected abstract Class<S> getServiceClass(); /** * 获取用户的信息 * * @return */ public static User getUser() { return user; } /** * 设置用户的信息 * * @param user */ public static void setUser(User user) { BaseRepository.user = user; } /** * 检查是否可以进行网络请求 * * @return */ public boolean isCanRequest() { //验证用户 if (user == null || user.id() == 0) { ToastUtil.showToast(mContext, "用户为空,请重新登录"); return false; } //验证网络连接 if (!AppUtil.isOnline(mContext)) { ToastUtil.showToast(mContext, "请检查你的网络连接"); return false; } return true; } /** * 判断请求是否取消 * * @return */ public boolean isCancled() { LogUtil.d(TAG, "请求是否取消:" + isCancle); return isCancle; } /** * 取消请求 */ public void cancleRequest() { this.isCancle = true; } /** * 开始请求 */ public void startRequest() { if(!isCanRequest){ cancleRequest(); return; } this.isCancle = false; }}
下面来看看如何使用的:(登录的数据仓库)
/** * LoginRepository 登录的数据仓库类 * <p/> * Created by tianlai on 16-3-16. */public class LoginRepository extends BaseRepository<LoginApiService> { @Inject public LoginRepository(Context context, Retrofit retrofit) { super(context, retrofit); } @Override protected Class<LoginApiService> getServiceClass() { return LoginApiService.class; } /** * 登录请求 * * @param mobile * @param psw * @return */ public rx.Observable<LoginResponce> login(@NonNull String mobile, @NonNull String psw) { startRequest(); return service.login(mobile,psw); }}
其中:
LoginApiService是登录的接口,网络请求使用的是retrofit;
LoginResponce是登录的直接返回结果类
由于目前项目中数据量比较小,数据更新比较频繁,暂时未做缓存处理,如果以后有需要做缓存处理,那么缓存处理也会放在Repository中,需要自定义一些缓存策略。
好了就说到这里吧!
如果有更深的理解,本文将会修改;
如果有错误的地方,欢迎指正;
如果你有更好的理解,欢迎交流。
本文为原创文章,版权归博主所有,转载请注明出处。
更多资料:
我的github地址以及使用demo: https://github.com/naivor/naivorapp
0 0
- 安卓开发 第五篇 我的安卓应用架构设计-----Repository类
- 安卓开发 第三篇 我的安卓应用架构设计-----Responce类
- 安卓开发 第四篇 我的安卓应用架构设计-----Presenter类
- 安卓开发 第六篇 我的安卓应用架构设计-----BaseActivity类
- 安卓开发 第二篇 我的安卓应用架构设计
- 安卓开发 第八篇 我的安卓应用架构设计-----图片选择以及剪裁
- 安卓开发 第七篇 我的安卓应用架构设计-----Adapter类及ViewHolder类
- 第二篇 我的安卓应用架构设计
- 安卓设计架构
- 我的安卓开发学习笔记一:安卓系统架构
- 安卓应用架构思考
- 安卓的架构
- Android开发架构设计之健壮且可读的安卓架构(上篇)
- Android开发架构设计之健壮且可读的安卓架构(下篇)
- 我的安卓
- 基于安卓的移动应用开发
- 安卓的简单开发应用
- 安卓开发中Handler的应用
- EF框架—Model-First
- 12.IntelliJ IDEA 缓存和索引介绍和清理方法 - IntelliJ IDEA 使用教程
- 关于Android在线支付Alipay(支付宝)开发的经验分享,androidalipay
- Google Play Store如何换区
- s3c2440驱动程序_/*功能:使用查询方式读取按键值
- 安卓开发 第五篇 我的安卓应用架构设计-----Repository类
- WordPress中查看所有页面信息
- pythondb操作
- 【个人笔记】Linux学习笔记(持续更新)
- 13.IntelliJ IDEA 编译方式介绍 - IntelliJ IDEA 使用教程
- JAVA面向对象学习
- 简单自定义Toast
- 14.IntelliJ IDEA 项目相关的几个重要概念介绍 - IntelliJ IDEA 使用教程
- poj3041 最小点覆盖即最大匹配(匈牙利算法)(模板)