Bmob用户功能详解(二)

2016/01/05 14:57
阅读数 95

扩展用户

上一篇文章中我介绍了怎么使用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(登录)两个方法,这两个方法在 用户注册或登录成功之后都会在本地缓存该用户的信息(除密码外),这里我们称它为本地用户信息或缓存用户信息。
为什么要缓存这个用户信息呢?主要目的有二:

  1. 避免重复登录

  2. 方便获取、展示用户信息

那么该怎样获取这个缓存在本地的用户信息呢?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();
....

总结

扩展BmobUser类能让Bmob用户功能更加符合个性化的业务需求。同时,结合本地用户信息能更方便的展示登录用户信息,避免重复登录和过多的逻辑判断。


展开阅读全文
打赏
0
5 收藏
分享
加载中
更多评论
打赏
0 评论
5 收藏
0
分享
返回顶部
顶部