上一篇文章中我介绍了怎么使用BmobSDK进行简单的用户注册、登录操作。
文中我们是使用BmobSDK默认的BmobUser类来设置用户名、密码注册登录的。这是一种非常简单的用户对象,只包含了用户名和密码两个属性,实际开发中,我们的用户信息还包含年龄、性别、昵称等等其他属性。
这个时候我们该怎么做呢?很简单,我们只需要新建一个用户类继承自BmobUser,在这个类中扩展其他我们需要的用户属性。代码如下:
public class MyUser extends BmobUser {
/**
* 年龄
*/
private Integer age;
/**
* 性别
*/
private Boolean gender;
/**
* 昵称
*/
private String nickname;
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Boolean getGender() {
return gender;
}
public void setGender(Boolean gender) {
this.gender = gender;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
}
注册
那么接下来进行用户注册和登录有什么区别吗?
其实没什么变化,只是这次我们不再使用BmobUser类,而是使用我们新创建的MyUser类来创建用户对象进行注册和登录。
代码如下:
// 使用BmobSDK提供的注册功能
MyUser myUser = new MyUser();
myUser.setUsername("abc");
myUser.setPassword("123456");
myUser.setNickname("鸣人");
myUser.setAge(18);
myUser.setGender(true);//true为男,false为女
myUser.signUp(this, new SaveListener() {
@Override
public void onSuccess() {
Toast.makeText(CustomUserSignUpActivity.this, "注册成功", Toast.LENGTH_SHORT).show();
}
@Override
public void onFailure(int i, String s) {
Toast.makeText(CustomUserSignUpActivity.this, "注册失败", Toast.LENGTH_SHORT).show();
}
});
以上代码中,我创建了myUser对象,除了设置用户名和密码之外,还设置了昵称、年龄和性别,然后同样是调用signUp方法进行注册,这和上一篇文章中的注册方法是一样的。
只不过这次注册成功后在Bmob后台中User表发生了一些变化,先看图:
User表中比之前多出了三个数据列(gender、nickname、age),这就是MyUser类扩展的三个属性。
从这里可以看出,数据表的列名称是和MyUser类的属性名称对应的。在MyUser类中增加新的属性,注册时会同步到Bmob后台的数据表中。
注意
这里需要注意一点,之前注册的“稻草人”这个账号在登录成功后getGender、getNickname、getAge是返回null的。
所以需要注意管理好继承自BmobUser类和BmobObject类的属性,在确定好各个属性后,尽量不要修改。如果特殊情况新增了属性,在get的时候记得要判断为null的情况。
登录
登录和上一篇文章中介绍的一样,可以使用BmobUser也可以使用MyUser进行登录,下面是使用MyUser对象进行的登录操作。
MyUser myUser = new MyUser();
myUser.setUsername("abc");
myUser.setPassword("123456");
myUser.login(this, new SaveListener() {
@Override
public void onSuccess() {
Toast.makeText(CustomUserSignUpActivity.this, "登录成功", Toast.LENGTH_SHORT).show();
}
@Override
public void onFailure(int i, String s) {
Toast.makeText(CustomUserSignUpActivity.this, "登录失败", Toast.LENGTH_SHORT).show();
}
});
本地用户信息
说完了注册和登录功能,我们来好好解释下BmobUser这个类。
BmobUser类是继承自BmobObject类的,它存在的主要目的就是为了解决应用中关于用户系统的相关功能(注册、登录、修改密码…)。
在BmobUser类中实现了signUp(注册)和login(登录)两个方法,这两个方法在用户注册或登录成功之后都会在本地缓存该用户的信息(除密码外),这里我们称它为本地用户信息或缓存用户信息。
为什么要缓存这个用户信息呢?主要目的有二:
- 避免重复登录
- 方便获取、展示用户信息
那么该怎样获取这个缓存在本地的用户信息呢?BmobUser类中的静态方法getCurrentUser可以很方便的将本地的用户信息提取出来用一个BmobUser对象返回。
MyUser user = BmobUser.getCurrentUser(this, MyUser.class);
以上代码中,第二个参数指定以MyUser.class类型将本地用户信息返回。
最后我还是提一下,在什么情况下使用这个本地用户信息吧。
比如一般应用在启动的时候需要判断用户是否已登录,如果登录了则可以正常进入使用,未登录则跳转到登录or注册界面。简单的代码如下:
MyUser user = BmobUser.getCurrentUser(this, MyUser.class);
if(null == user){
// 未登录,跳转到登录Or注册界面
}else{
// 已登录,正在进入应用
}
在应用中需要显示当前登录用户的信息时,同样是getCurrentUser,然后get各属性的值进行展示:
MyUser user = BmobUser.getCurrentUser(this, MyUser.class);
user.getNickname();
user.getAge();
....