您的位置:首页 > 其它

智能厨房重构-使用Bmob后端云实现用户注册登录的功能。

2017-08-14 06:20 1036 查看
(转载)http://blog.csdn.net/u014316462/article/details/52204530

上一篇智能厨房重构-用ActiveAndroid来实现收藏的功能介绍了本地数据库的实现,有了第一个博友评论说还不错,受益良多,很感动,因为这让我感觉到了技术分享的力量,我们都不是一个人孤军奋战,我们是一个互相交流的群体,因为分享,我们会变得更好。今天给大家介绍一下使用Bmob后端云搭建自己的网上服务器,以后再也不要求着搞服务器的了,自己一个人搞定一个客户端。因为此处篇幅比较多,所以我决定分两篇博客进行讲解,欢迎看下篇 智能厨房重构-使用Bmob后端云实现朋友圈的功能。


1. 环境配置


1.1 服务器配置

首先你需要注册一个Bmob的账号,进入官网即可,注册一个自己的App,如何在后台建立属于自己的表,基本都是傻瓜式建表了,不需要使用SQL语言,来看一下我建的表:



表搭建好了,服务器这边就完事了,就是如此简单。


1.2 客户端环境配置

搞完服务器,接下来就需要将bmob集成到我们的客户端中来了,其实我也是官网文档的搬运工,我就将最主要的步骤介绍一下:



去官网上面下载这两个JAR包,然后再build gradle中添加两个依赖,官网文档中还有直接导入的方式,给个链接http://docs.bmob.cn/data/Android/a_faststart/doc/index.html#初始化BmobSDK,都是比较简单的。


1.3 基本的数据类型和函数

数据类型 

目前为止,Bmob支持的数据类型:String、Integer、Float、Short、Byte、Double、Character、Boolean、Object、Array。 

同时也支持BmobObject、BmobDate、BmobGeoPoint、BmobFile特有的数据类型。



添加数据 

添加数据使用BmobObject对象的save方法,就可以将当前对象的内容保存到Bmob服务端。 

例如,你现在要保存一条游戏分数的记录,代码如下:
GameScore gameScore = new GameScore();
//注意:不能调用gameScore.setObjectId("")方法
gameScore.setPlayerName("比目");
gameScore.setScore(89);
gameScore.setIsPay(false);
gameScore.save(new SaveListener<String>() {

@Override
public void done(String objectId, BmobException e) {
if(e==null){
toast("创建数据成功:" + objectId);
}else{
Log.i("bmob","失败:"+e.getMessage()+","+e.getErrorCode());
}
}
})
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

删除数据 

从服务器删除对象。例如:将GameScore表中objectId为dd8e6aff28的数据删除。
GameScore gameScore = new GameScore();
gameScore.setObjectId("dd8e6aff28");
gameScore.delete(new UpdateListener() {

@Override
public void done(BmobException e) {
if(e==null){
Log.i("bmob","成功");
}else{
Log.i("bmob","失败:"+e.getMessage()+","+e.getErrorCode());
}
}
});
1
2
3
4
5
6
7
8
9
10
11
12
13
1
2
3
4
5
6
7
8
9
10
11
12
13

查询数据 

当我们知道某条数据的objectId时,就可以根据objectId直接获取单条数据对象。例如:查询objectId为a203eba875的人员信息。
BmobQuery<GameScore> query = new BmobQuery<GameScore>();
query.getObject("a203eba875", new QueryListener<GameScore>() {

@Override
public void done(GameScore object, BmobException e) {
if(e==null){
//获得playerName的信息
object.getPlayerName();
//获得数据的objectId信息
object.getObjectId();
//获得createdAt数据创建时间(注意是:createdAt,不是createAt)
object.getCreatedAt();
}else{
Log.i("bmob","失败:"+e.getMessage()+","+e.getErrorCode());
}
}

});
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

修改数据 

更新一个对象也是非常简单。例如:将GameScore表中objectId为0c6db13c的游戏分数修改为77.
GameScore gameScore = new GameScore();
gameScore.setScore(77);
gameScore.update("0c6db13c", new UpdateListener() {

@Override
public void done(BmobException e) {
if(e==null){
Log.i("bmob","更新成功");
}else{
Log.i("bmob","更新失败:"+e.getMessage()+","+e.getErrorCode());
}
}
});
1
2
3
4
5
6
7
8
9
10
11
12
13
1
2
3
4
5
6
7
8
9
10
11
12
13

函数都比较简单好用,如果想要了解更多,请直接看官网文档。


2.实战

现在服务器和客户端的环境都配置好,现在我们可以开始实战了。我们要实现的注册和登录的功能,首先来看一下流程 




2.1 建立实体对象

使用Bmob,必须遵守的一个规则就是,你的实体对象名必须和表名相同,表中的每一个列都对应一个属性,必须继承BmobObject这个类,这一点很不好,假如和ActiveAndroid连用的话,就冲突了,因为Java中不能多重继承,比如上面的用户表对应实体类就是:
/**
* 作者:GXL on 2016/8/3 0003
* 博客: http://blog.csdn.net/u014316462 * 作用:用户表
*/
public class User extends BmobObject implements Serializable{

//姓名
String Name;
//头像
BmobFile Photo;
//密码
String Password;

public String getNumber() {
return Number;
}

public void setNumber(String number) {
Number = number;
}

//手机号码
String Number;

public String getName() {
return Name;
}

public void setName(String name) {
Name = name;
}

public BmobFile getPhoto() {
return Photo;
}

public void setPhoto(BmobFile photo) {
Photo = photo;
}

public String getPassword() {
return Password;
}

public void setPassword(String password) {
Password = password;
}

public User() {
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52


2.2 建立UserModel和服务器进行数据交互

/**
* 作者:GXL on 2016/8/3 0003
* 博客: http://blog.csdn.net/u014316462 * 作用:用户信息Model
*/
public class UserModel implements UserModelImpl {

private final String LOGINUSER = "loginuser";

/**
* 用户登录验证
*
* @param phone
* @param passoword
* @param listener
*/
@Override
public void getUser(String phone, String passoword, final FoodModelImpl.BaseListener listener) {
BmobQuery<User> query = new BmobQuery<User>();
query.addWhereEqualTo("Number", phone);
query.addWhereEqualTo("Password", passoword);
query.setLimit(1);
query.findObjects(BaseApplication.getmContext(), new FindListener<User>() {
@Override
public void onSuccess(List<User> object) {
if (object != null && object.size() != 0) {
SPUtils.put(BaseApplication.getmContext(), LOGINUSER, object.get(0));
listener.getSuccess(object.get(0));
} else {
listener.getFailure();
}
}

@Override
public void onError(int code, String msg) {

}
});
}

/**
* 根据objectId获取User
*
* @param objectId
* @param listener
*/
@Override
public void getUser(String objectId, final FoodModelImpl.BaseListener listener) {
BmobQuery<User> query = new BmobQuery<User>();
query.addWhereEqualTo("objectId", objectId);
query.setLimit(1);
query.findObjects(BaseApplication.getmContext(), new FindListener<User>() {
@Override
public void onSuccess(List<User> object) {
if (object != null && object.size() != 0) {
SPUtils.put(BaseApplication.getmContext(), LOGINUSER, object.get(0));
listener.getSuccess(object.get(0));
} else {
listener.getFailure();
}
}

@Override
public void onError(int code, String msg) {

}
});
}

/**
* 更换用户的头像
*
* @param path
* @param listener
*/
public void updateUserPhoto(String path, final String objectId, final FoodModelImpl.BaseListener listener) {
final BmobFile bmobFile = new BmobFile(new File(path));
bmobFile.upload(BaseApplication.getmContext(), new UploadFileListener() {
@Override
public void onSuccess() {
final User user = new User();
user.setPhoto(bmobFile);
user.update(BaseApplication.getmContext(), objectId, new UpdateListener() {
@Override
public void onSuccess() {
listener.getSuccess(user);

}

@Override
public void onFailure(int i, String s) {
listener.getFailure();
}
});
}

@Override
public void onFailure(int i, String s) {
listener.getFailure();
}
});
}

/**
* 判断当前用户是否登录
*
* @return
*/
public boolean isLogin() {
List<UserLocal> list = new Select().from(UserLocal.class).execute();
if (list.size() != 0) {
return true;
} else {
return false;
}
}

/**
* 将当前登录的对象保持到数据库中
*
* @param userLocal
*/
public void putUserLocal(UserLocal userLocal) {
new Delete().from(UserLocal.class).execute();
userLocal.save();
}

/**
* 获取当前登录的对象
*
* @return
*/
public UserLocal getUserLocal() {
return new Select().from(UserLocal.class).executeSingle();
}

/**
* 注册功能
*
* @param user
*/
public void onRegister(User user, final FoodModelImpl.BaseListener listener) {
user.save(BaseApplication.getmContext(), new SaveListener() {
@Override
public void onSuccess() {
ToastUtils.showLong(BaseApplication.getmContext(), "注册成功");
listener.getSuccess(null);
}

@Override
public void onFailure(int i, String s) {
ToastUtils.showLong(BaseApplication.getmContext(), "注册失败");
listener.getFailure();
}
});
}

/**
* 判断当前手机号码是否注册
*
* @param phone
* @param listener
* @return
*/
public void isPhoneRegister(String phone, final FoodModelImpl.BaseListener listener) {
BmobQuery<User> query = new BmobQuery<User>();
query.addWhereEqualTo("Number", phone);
query.setLimit(1);
query.findObjects(BaseApplication.getmContext(), new FindListener<User>() {
@Override
public void onSuccess(List<User> object) {
if (object != null && object.size() != 0) {
listener.getSuccess(object.get(0));
} else {
listener.getFailure();
}
}

@Override
public void onError(int code, String msg) {

}
});
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186

所有和服务器的数据请求和提交都在上面了,都很简单,都是利用了上面的函数。


2.3 使用效果



详细的项目代码地址:https://github.com/gxl1240779189/ReIntelligentKitchen,如果决定效果还可以,请点个赞支持一下,多谢了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐