扩展用户

上一篇文章中我介绍了怎么使用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() {@Overridepublic void onSuccess() {Toast.makeText(CustomUserSignUpActivity.this, "注册成功", Toast.LENGTH_SHORT).show();}@Overridepublic 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() {@Overridepublic void onSuccess() {Toast.makeText(CustomUserSignUpActivity.this, "登录成功", Toast.LENGTH_SHORT).show();}@Overridepublic 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用户功能更加符合个性化的业务需求。同时,结合本地用户信息能更方便的展示登录用户信息,避免重复登录和过多的逻辑判断。

Bmob用户功能详解(二)相关推荐

  1. Bmob用户功能详解(一)

    在开发应用程序的时候,很多情况下我们需要进行用户注册.登录.修改密码等等一系列和用户相关的功能.那么要实现这些功能比较普遍的做法是,有一个服务器端,包括数据库设计.服务器部署.业务逻辑接口编写.服务端 ...

  2. Bmob用户功能详解(三)

    在前面的两篇文章中讲了,怎么用账号和密码进行注册.登录,以及扩展自定义的用户属性.这其中都还只是涉及到Bmob中一些简单的数据类型,其实在用户属性中还有一个最常见的属性就是用户头像.那么今天这篇文章中 ...

  3. tekla二次开发用C语言,Tekla能够进行哪些二次开发?Tekla二次开发功能详解

    我们话不多说,这次小编来给你讲一些搜罗而来的Tekla软件二次开发的功能.虽然是科普,不过这些二次开发功能有的还真的是很好用的,帮了大忙. 一.桥梁功能 如果向Tekla插件中加入了桥梁模块的功能,通 ...

  4. python编程用户登陆c_django实现用户登陆功能详解

    简介: Python下有许多款不同的 Web 框架.Django是重量级选手中最有代表性的一位.许多成功的网站和APP都基于Django. Django是一个开放源代码的Web应用框架,由Python ...

  5. MySQL的用户密码过期功能详解

    MySQL的用户密码过期功能详解 作者:chszs,未经博主允许不得转载.经许可的转载需注明作者和博客主页:http://blog.csdn.net/chszs 先说明两个术语. Payment Ca ...

  6. Linux下的tar归档及解压缩功能详解

    Linux下的tar归档及解压缩功能详解 一.Linux下解压缩工具 二.gzip工具的使用方法 三.其他解压缩工具 一.Linux下解压缩工具 二.gzip工具的使用方法 三.其他解压缩工具 一.L ...

  7. PopUpWindow使用详解(二)——进阶及答疑

    相关文章: 1.<PopUpWindow使用详解(一)--基本使用> 2.<PopUpWindow使用详解(二)--进阶及答疑> 上篇为大家基本讲述了有关PopupWindow ...

  8. 【转载】Linux命令-自动挂载文件/etc/fstab功能详解[转]

    博客园 首页 新随笔 联系 订阅 管理 随笔 - 322  文章 - 0  评论 - 19 Linux命令-自动挂载文件/etc/fstab功能详解[转]     一./etc/fstab文件的作用 ...

  9. OS--进程间通信详解(二)

    OS–进程间通信详解(二) 文章目录 OS--进程间通信详解(二) 一.进程间通信 1.互斥量 Futexes Pthreads中的互斥量 2.管程 3.消息传递 消息传递系统的设计要点 用消息传递解 ...

最新文章

  1. [sinatra] Just Do It: Learn Sinatra, Part One Darren Jones
  2. C++自动生成的成员函数
  3. Samba amp; Nginx - Resource temporarily unavailable
  4. 1114. Family Property (25)
  5. Configuring the Java Virtual Manager (JVM)
  6. mysql scws_php利用scws实现mysql全文搜索功能的方法,_PHP教程
  7. [单反八]人像三平原则
  8. SQL基础E-R图画法(二)
  9. C#创建用户控件 - IPv4地址输入框
  10. 抽奖啦!量子位原创T恤任性送,夏天就要酷酷的
  11. 问题六十:怎么用ray tracing画回旋体(rotational sweeping / revolution)
  12. 算法笔记_面试题_2.移动零(将数组的的0元素移到末尾)
  13. mysql和oracle的时间字段区别_Oracle数据库中关于日期和时间字段类型
  14. 线程间的通信之wait和notify的使用
  15. 关于xp英文版安装多国语言包的问题
  16. QGIS无人机数据分析教程
  17. 【背包问题】完全背包问题
  18. 电脑文件怎么加密?第一种方法最简单
  19. 【C++】Big Five: 构造函数、拷贝构造函数、拷贝赋值函数、移动构造函数、析构函数
  20. 牛气霸屏v4.1.8

热门文章

  1. 揭秘朝鲜自主操作系统:红星Red Star
  2. Win 7XP2003Vista下单/双网卡实现×××+NAT代理服务器共享上网的方法
  3. 【FPGA】【入门基础】一、FPGA实现跑马灯
  4. php插入友情链接,PHP_详解WordPress中添加友情链接的方法,友情链接对于一个每个独立博 - phpStudy...
  5. 批处理启动或停止打印机服务
  6. 新浪微博 [异常问题] 414 Request-URL Too Large
  7. 使用AMD显卡安装tch-rs(Rust版Pytorch)
  8. proteus仿真控制电机正转、反转和停止转动
  9. 推荐九个数据可视化工具,快速生成可视化信息
  10. javaScript封装的各种写法