Bmob用户功能详解(二)

扩展用户

上一篇文章中我介绍了怎么使用BmobSDK进行简单的用户注册、登陆操做。文中咱们是使用BmobSDK默认的BmobUser类来设置用户名、 密码注册登陆的。这是一种很是简单的用户对象,只包含了用户名和密码两个属性,实际开发中,咱们的用户信息还包含年龄、性别、昵称等等其余属性。这个时候 咱们该怎么作呢?很简单,咱们只须要新建一个用户类继承自BmobUser,在这个类中扩展其余咱们须要的用户属性。代码以下:java

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表发生了一些变化,先看图:ide


User表中比以前多出了三个数据列(gender、nickname、age),这就是MyUser类扩展的三个属性。从这里能够看出,数据表的列名称是和MyUser类的属性名称对应的。在MyUser类中增长新的属性,注册时会同步到Bmob后台的数据表中。this

注意spa

这里须要注意一点,以前注册的“稻草人”这个帐号在登陆成功后getGender、getNickname、getAge是返回null的。
 因此须要注意管理好继承自BmobUser类和BmobObject类的属性,在肯定好各个属性后,尽可能不要修改。若是特殊状况新增了属性,在get的时候记得要判断为null的状况。code

登陆

登陆和上一篇文章中介绍的同样,可使用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. 方便获取、展现用户信息get

那么该怎样获取这个缓存在本地的用户信息呢?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用户功能更加符合个性化的业务需求。同时,结合本地用户信息能更方便的展现登陆用户信息,避免重复登陆和过多的逻辑判断。

相关文章
相关标签/搜索