BasePrj包含两部分内容:一是公共资源业务等;一是注册登录个人中心模块。
其中使用到的第三方库包括:时间传递机制:EventBus;json数据解析:Gson;数据库模块litepal,gif图片显示:giflib等。
当然这里还用到了之前提到的VolleySupport和FrescoSupport.
该模块位于`com.het.common下.以下是模块UML图:
其中,AppContext(图中未给出)是改模块全局注册类,包含一个初始化方法init,初始化了volley,Fresco,litepal等模块。建立使用此模块时,在你的应用的application的onCreate中调用此方法(只调用一次)
NetworkBuilder和IBaseNetwork是对外提供的网络请求基类,用于处理网络访问。HetNetworkBuilder和IHetBaseNetwork是针对Het服务器业务的封装。
其中build部分参数说明详见注释,很清晰。
对于服务器数据的解析,提供了接口IJsonCodeParse。目前有两个实现
BaseJsonCodeParse:对服务器返回的数据未做处理,直接返回。
HetJsonCodeParse:解析了json最外层的RetModel,处理了token相关的错误,并根据code区分业务是成功还是失败。
MulipartBaseNetwork是针对上传流的封装。
NetworkQueueManager用于管理请求队列,协助处理token异常下刷新token等问题。内部包含方法cancelAndRemoveByTag
和cancelAndRemoveByNetwork
用于取消请求。
TokenManager 用于全局管理token,所有的token处理操作,包括登陆时设置,退出登陆时候取消(详细见后面登录公共模块分析),强烈建议统一走此入口。
模块中包含了utils包,全局工具类。还包含了resource,全局公共控件库。
接口使用方式示例:
public static void login(ICallback callback, String account, String password, int id) {
TreeMap<String, String> params = new TreeMap<String, String>();
params.put(ParamContant.User.ACCOUNT, account);
params.put(ParamContant.User.PASSWORD, SecurityUtils.encrypt4login(password, AppContext.getAppSecret()));
new HetNetworkBuilder(new HetBaseNetwork()).setCallBack(callback)
.setParams(params).setUrl(ComUrls.SERVER_HOST + AccountUrls.Login.LOGIN).setMethod(Request.Method.POST).setId(id).setNoAccessToken().setSign().setHttps().commit();
}
对于het业务的请求,使用默认的HetJsonCodeParse解析就好,会最终回调callback接口给ui层处理业务逻辑
对于其他第三方的请求,可以参考HetJsonCodeParse,完成解析和回调。
这一层主要是处理网络请求,时序图如下:
这部分请艳国更新和完善,一下为简单介绍:
该模块处理了用户注册登录找回密码等内容(包括第三方登录部分)
提供了几个对外接口:
LoginManager:登录的全局管理类,包含以下:
HetLogin het登录
SinaWeiboLogin 新浪微博第三方登录
WeiXinlogin 微信第三方登录
UserManager 用户信息管理全局类:所有的用户操作走此接口。
目前登录/注册等完成后都会初始化房间信息,好友信息(从服务器获取)。可以直接使用。
friend包下
提供了一个FriendManager全局类,用于管理好友。强烈建议所有好友操作的入口为此类。
当好友信息变更的时候,会抛出eventbus事件FriendChangeEvent;当有选择好友列表中的好友事件时,会抛出eventbus事件FriendChooseEvent;需要捕获此类事件的activity可以通过如下代码获取事件监听回调。
public void onEventMainThread(FriendChangeEvent event){
//处理业务逻辑UI线程
}
public void onEvent(FriendChooseEvent event){
//处理业务逻辑非UI线程
}
room包下
提供了一个RoomManager全局类,用于管理房间信息。强烈建议所有房间操作的入口为此类。
当房间信息变更的时候,同样包含两个eventbus事件RoomChangeEvent,RoomChooseEvent,用法同上。
这部分请艳国更新和完善。
源码地址为:见svn的maven目录。
svn请使用测试版地址:compile ‘com.android.common:BaseProject:1.2.0-SNAPSHOT’,待测试版本稳定后会统一切换正式版。