如果耐不住寂寞,你就看不到繁华。
本讲内容:用户管理
用户是一个应用程序的核心。对于个人开发者来说,自己的应用程序积累到越多的用户,就会给自己带来越强的创作动力。因此Bmob提供了一个专门的用户类——BmobUser来自动处理用户账户管理所需的功能。有了这个类,你就可以在你的应用程序中添加用户账户功能。
BmobUser是BmobObject的一个子类,它继承了BmobObject所有的方法,具有BmobObject相同的功能。不同的是,BmobUser增加了一些特定的关于用户账户管理相关的功能。
1、属性
BmobUser除了从BmobObject继承的属性外,还有几个特定的属性: username: 用户的用户名(必需)。 password: 用户的密码(必需)。 email: 用户的电子邮件地址(可选)。
2、扩展用户类
很多时候,你的用户表还会有很多其他字段,如性别、年龄、头像等。那么,你需要对BmobUser类进行扩展,添加一些新的属性。示例代码如下所示:
public class SpecialUser extends BmobUser {
private boolean sex;
private String nick;
public boolean getSex() {
return this.sex;
}
public void setSex(boolean sex) {
this.sex = sex;
}
public String getNick() {
return this.sex;
}
public void setNick(String nick) {
this.nick = nick;
}
}
3、 创建用户对象如下:
BmobUser user = new BmobUser();
二、注册用户
在注册过程中,服务器会对注册用户信息进行检查,以确保注册的用户名和电子邮件地址是独一无二的。此外,对于用户的密码,你可以在应用程序中进行相应的加密处理后提交。 如果注册不成功,你可以查看返回的错误对象。最有可能的情况是,用户名或电子邮件已经被另一个用户注册。这种情况你可以提示用户,要求他们尝试使用不同的用户名进行注册。
你也可以要求用户使用Email做为用户名注册,这样做的好处是,你在提交信息的时候可以将输入的“用户名“默认设置为用户的Email地址,以后在用户忘记密码的情况下可以使用Bmob提供重置密码功能。
这里有两点需要注意的:
有些时候你可能需要在用户注册时发送一封验证邮件,以确认用户邮箱的真实性。这时,你只需要登录自己的应用管理后台,在应用设置->邮件设置(下图)中把“邮箱验证”功能打开,Bmob云后端就会在注册时自动发动一封验证给用户。
- username字段是大小写敏感的字段,如果你希望应用的用户名不区分大小写,请在注册和登录时进行大小写的统一转换。
三、登录用户
当用户注册成功后,您需要让他们以后能够用注册的用户名登录到他们的账户使用应用。要做到这一点,你可以使用BmobUser类的login方法。
四、获取当前用户
如果用户在每次打开你的应用程序时都要登录,这将会直接影响到你应用的用户体验。为了避免这种情况,你可以使用缓存的CurrentUser对象。
每当你应用的用户注册成功或是第一次登录成功,都会在本地磁盘中有一个缓存的用户对象,这样,你可以通过获取这个缓存的用户对象来进行登录:
BmobUser bmobUser = BmobUser.getCurrentUser(this);
if(bmobUser != null){
// 允许用户使用应用
}else{
//缓存用户对象为空时, 可打开用户注册界面…
}
在扩展了用户类的情况下获取当前登录用户,可以使用如下的示例代码(
SpecialUser
类可参看上面):
SpecialUser userInfo = BmobUser.getCurrentUser(this,SpecialUser.class);
五、密码重置
一旦你引入了一个密码系统,那么肯定会有用户忘记密码的情况。对于这种情况,我们提供了一种方法,让用户安全地重置起密码。
重置密码的流程很简单,开发者只需要求用户输入注册的电子邮件地址即可:
示例一:
下面是res/layout/activity_main.xml 布局文件:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ListView
android:id="@+id/listview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:cacheColorHint="#00000000"
android:listSelector="@drawable/selector_list_item" />
</RelativeLayout>
下面是res/layout/list_item.xml 布局文件:
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/tv_item"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:minHeight="56dp"
android:paddingLeft="20dp"
android:textSize="16sp" >
</TextView>
下面是res/drawable/selector_list_item文件
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"><shape>
<solid android:color="@color/white" />
</shape></item>
<item android:state_focused="true"><shape>
<solid android:color="@color/white" />
</shape></item>
<item android:state_selected="true"><shape>
<solid android:color="@color/white" />
</shape></item>
<item><shape>
<solid android:color="@color/ivory" />
</shape></item>
</selector>
下面是res/values/strings.xml 布局文件:
<string-array name="user_list">
<item>1. 注册用户</item>
<item>2. 登陆用户</item>
<item>3. 获取当前用户</item>
<item>4. 退出登陆</item>
<item>5. 更新用户</item>
<item>6. 查询用户</item>
<item>7. 重置密码</item>
<item>8. 验证旧密码</item>
<item>9. 验证邮件</item>
</string-array>
下面是MyUser.java文件:
/**
* 扩展用户类
*/
public class MyUser extends BmobUser {
private Integer age;
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
下面是BaseActivity.java文件:
/**
* 设置activity的基础类
* 变量可以在这里设置
*
*/
public class BaseActivity extends Activity {
public static String TAG="tag";
protected ListView mListview;
protected BaseAdapter mAdapter;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
public void toast(String msg){
Toast.makeText(this, msg, Toast.LENGTH_LONG).show();
Log.d(TAG, msg);
}
}
下面是UserActivity.java主界面文件:
/**
* 用户管理
* @author Administrator
*
*/
public class UserActivity extends BaseActivity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 初始化 Bmob SDK ,并将第二个参数appKey替换成你在Bmob服务器端创建的应用key
Bmob.initialize(this, "14fcb34593937578a18862a1b33f29a1");
mListview=(ListView) findViewById(R.id.listview);
mAdapter=new ArrayAdapter<>(this, R.layout.list_item, getResources().getStringArray(R.array.user_list));
mListview.setAdapter(mAdapter);
mListview.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,int position, long id) {
testBmob(position+1);
}
});
}
private void testBmob(int position){
switch (position) {
case 1:
testSignUp();
break;
case 2:
testLogin();
break;
case 3:
testGetCurrentUser();
break;
case 4:
testLogOut();
break;
case 5:
updateUser();
break;
case 6:
testFindBmobUser();
break;
case 7:
testResetPassword();
break;
case 8:
testCheckPassword();
break;
case 9:
testEmailVerify();
break;
}
}
/**
* 注册用户
*/
private void testSignUp(){
final MyUser myUser=new MyUser();
myUser.setUsername("jin");
myUser.setPassword("123456");
myUser.setEmail("1156494083@qq.com");
myUser.setAge(21);
myUser.signUp(this, new SaveListener() {
public void onSuccess() {
toast("注册成功:" + myUser.getUsername() + "-"+ myUser.getObjectId() + "-" + myUser.getCreatedAt()
+ "-" + myUser.getSessionToken()+",是否验证:"+myUser.getEmailVerified());
}
public void onFailure(int code, String msg) {
toast("注册失败:" + msg);
}
});
}
/**
* 登陆用户
*/
private void testLogin() {
final BmobUser bu2=new BmobUser();
bu2.setUsername("jin");
bu2.setPassword("123456");
bu2.login(this, new SaveListener() {
public void onSuccess() {
toast(bu2.getUsername() + "登陆成功");
testGetCurrentUser();
}
public void onFailure(int code, String msg) {
toast("登陆失败:" + msg);
}
});
}
/**
* 获取当前用户
*/
private void testGetCurrentUser() {
//没扩展了用户类的情况下获取当前登录用户
// BmobUser myUser = BmobUser.getCurrentUser(this);
// toast("当前用户信息:objectId = "+myUser);
// Log.i("tag","当前用户信息:objectId = " + myUser);
//在扩展了用户类的情况下获取当前登录用户
MyUser myUser=BmobUser.getCurrentUser(this,MyUser.class);
if(myUser!=null){
toast("当前用户信息:objectId =" + myUser.getObjectId() + ",name = " + myUser.getUsername()+ ",age = "+ myUser.getAge());
}else{
toast("当前用户为null,请登录。");
}
}
/**
* 退出当前登陆
*/
private void testLogOut() {
BmobUser.logOut(this);
toast("退出当前登陆");
}
/**
* 更新用户信息
*/
private void updateUser() {
MyUser newUser=new MyUser();
newUser.setAge(18);
// newUser.setUsername("dan");
// newUser.setPassword("118");密码也可以改的
BmobUser myUser=BmobUser.getCurrentUser(this);
newUser.update(this, myUser.getObjectId(), new UpdateListener() {
public void onSuccess() {
toast("更新用户信息成功:");
testGetCurrentUser();
}
public void onFailure(int code, String msg) {
toast("更新用户信息失败:" + msg);
}
});
}
/**
* 查询用户
*/
private void testFindBmobUser() {
BmobQuery<MyUser> query=new BmobQuery<MyUser>();
query.addWhereEqualTo("username", "jin");
query.findObjects(this, new FindListener<MyUser>() {
public void onSuccess(List<MyUser> object) {
toast("查询用户成功:" +object.size());
}
public void onError(int code, String msg) {
toast("查询用户失败:" + msg);
}
});
}
/**
* 重置密码
*/
private void testResetPassword() {
final String email="1156494083@qq.com";
BmobUser.resetPassword(this, email, new ResetPasswordListener() {
public void onSuccess() {
toast("重置密码请求成功,请到" + email + "邮箱进行密码重置操作");
}
public void onFailure(int code, String msg) {
toast("重置密码失败:" + msg);
}
});
}
/**
* 验证旧密码是否正确
*/
private void testCheckPassword() {
BmobQuery<MyUser> query=new BmobQuery<MyUser>();
final MyUser myUser=BmobUser.getCurrentUser(this, MyUser.class);
query.addWhereEqualTo("password", "123456");
query.addWhereEqualTo("username", myUser.getUsername());
query.findObjects(this, new FindListener<MyUser>() {
// 如果你传的密码是正确的,那么cod.size()的大小是1,这个就代表你输入的旧密码是正确的,否则是失败的
public void onError(int code, String msg) {
toast("查询密码失败:");
}
public void onSuccess(List<MyUser> object) {
toast("查询密码成功:" + object.size());
}
});
}
/**
* 请求验证邮件
* 发送给用户的邮箱验证邮件会在一周内失效,可以通过调用 requestEmailVerify 来强制重新发送:
*/
private void testEmailVerify() {
final String email="1156494083@qq.com";
BmobUser.requestEmailVerify(this, email, new EmailVerifyListener() {
public void onSuccess() {
toast("请求验证邮件成功,请到" + email + "邮箱中进行激活账户。");
}
public void onFailure(int code, String msg) {
toast("请求验证邮件失败:" + msg);
}
});
}
}
Take your time and enjoy it 要原码的、路过的、学习过的请留个言,顶个呗~~