前言:
《BaseProj库》
的使用以及剖析,weatherfish已经做过详细介绍,
具体可参考:http://blog.csdn.net/felix_wangq/article/details/50315047
正文:
一、介绍:
BaseProj库中账号体系部分分成2个包:account、usercenter
其中account主管:登录、注册、找回密码、设置密码、输入验证码、账号绑定、设置个人资料信息等。
usercenter主管:个人中心、个人资料、性别修改、昵称修改、图片多指缩放浏览、所在地区。
其目录结构分别如下:
account:
usercenter:
二、用法:
1):Account
以登录为例:
1.带界面
直接在你的主工程登录入口处,调用BaseProj中的LoginActivity就ok了。
一行代码:
LoginActivity.startLoginActivity(mContext);
//这个是LoginActivity中的一个静态方法,用来启动LoginActivity
//主要是方便开发者在自己的主工程中去进行相应的操作。
public static void startLoginActivity(Context context) {
Intent intent = new Intent(context, LoginActivity.class);
context.startActivity(intent);
}
//登录成功或失败的结果,我会通过EventBus总线的方式post一个LoginEvent实例出来,
//在你的MainActivity或BaseActivity中,重写OnEventMainThread(LoginEvent event){}方法
//来进行相关的操作即可。
/**
* 登录成功通知回调
*/
private void notifyLogin(boolean loginTrue) {
LoginEvent event = new LoginEvent();
event.setLoginSuccess(loginTrue);
EventBus.getDefault().post(event);
}
2、不带界面
如果开发者不需要界面,只要业务,那么就可以照如下操作:
//直接用LoginApi来调静态方法,传入参数即可
/**
* 1.登录
*
* @param callback 网络请求成功、失败回调
* @param account 登录用户名
* @param password 登录密码
* @param id 这是当时作者weatherfish考虑到扩展,需要外部传入的view id,现在没用到,传-1即可
*/
public static void login(ICallback callback, String account, String password, int id) {
TreeMap<String, String> params = new TreeMap<String, String>();
params.put(ComParamContant.User.ACCOUNT, account);
params.put(ComParamContant.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();
}
3,不要第三方登录入口
因为BaseProject里面默认是有第三方登录入口的,考虑到有的项目可能还没申请第三方的账号,或暂时不需要第三方登录入口,这时可以通过调下面的方法来去掉第三方登录:
LoginActivity.startLoginActivity(mContext,false);
4,那么假如我的界面与BaseProj中的都不一样了,只是接口是一样的,现在想用公司账号系统登录或第三方登录,咋办呢?答案如下:
在account/manager/中有一个LoginManager管理类,作为一个登录管理的入口,持有了hetLogin(),sinaWeiboLogin(),weixinLogin()等方法,具体见下图:
由于水平有限,暂时只能整理成这样,具体用法,
可以参考事例工程CLifeNew
2):Usercenter
这个没有什么特别要说的,用法跟上面的殊途同归。不理解的可稳步上面的事例工程。
3):UserManager
这是一个用户信息,行为统一管理类,
获取用户信息、更改用户信息、账号搜索
/**
* 1.获取用户信息
*/
public void getUserInfo(final ICallback<String> callback, final String thirdId, final String type) {
UserApi.get(new ICallback<String>() {
@Override
public void onSuccess(String s, int id) {
setUserModel(s);
callback.onSuccess(s, id);
}
@Override
public void onFailure(int code, String msg, int id) {
callback.onFailure(code, msg, id);
}
}, -1);
}
//2.如果已经登录,可以直接获取UserModel
public UserModel getUserModel() {
if (mUserModel == null || TextUtils.isEmpty(mUserModel.getUserId())) {
List<UserModel> list = DataSupport.findAll(UserModel.class);
if (list != null && list.size() > 0) {
mUserModel = list.get(0);
}
}
return mUserModel;
}
/**
* 3.修改用户信息相关函数
*
* @param callback 修改成功失败回调
* @param userModel
* @param id
*/
public void modifyPersonalInfo(final ICallback callback, final UserModel userModel, int id) {
UserApi.update(new ICallback() {
@Override
public void onSuccess(Object o, int id) {
setUserModel(userModel);
callback.onSuccess(o, id);
}
@Override
public void onFailure(int code, String msg, int id) {
callback.onFailure(code, msg, id);
}
}, userModel, id);
}
4):LoginManager
登录管理类,主要用来管理登录,退出,判断是否登录,第三方登录类型处理。
主要的方法如下:
hetLogin(IQueryFirstLoginCallback callback,String account,String password);//和而泰账号登录
sinaWeiboLogin(IQueryFirstLoginCallback callback, SsoHandler ssoHandler);//微博登录
weixinLogin(IQueryFirstLoginCallback callback);//微信登录
loginOut();//退出
isLogin();//是否登录
toBindThirdAccount(final String thirdId, final String bindType);//绑定第三方账号
bind(final String type, final UserModel thirdLoginUserModel);//第三方账号进入CLife账号系统
三、关于CommonTopBar
BaseProj中的界面标题栏不是用的ActionBar,而是自定义的CommonTopBar,它的背景色是可以动态修改的,依赖于v7包的主题:Theme.AppCompat.Light.NoActionBar.
所以当你想要标题栏显示你需要的颜色时,你得定义一个继承自Theme.AppCompat.Light.NoActionBar的主题。
eg:
//1.自定义style
<style name="Theme.CLife.Base" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">@color/common_top_bar_color</item><!--在这里给定自己需要的颜色-->
</style>
//2.CommonTopBar布局源码实现
<?xml version="1.0" encoding="utf-8"?>
<com.het.common.resource.widget.CommonTopBar xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/common_top_bar"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:background="?attr/colorPrimary">
</com.het.common.resource.widget.CommonTopBar>
关于?attr与@**等的区别,在这篇文章中有个简单的介绍。大家可以移步去看下。