Bmob
什么是bomb后端云?
介绍
《Bmob》是一个可以开发云存储的移动应用软件,给应用软件快速添加一个安全灵活的后台管理系统,方便浏览终端保存的各种信息。针对移动应用开发的特性,Bmob还提供了主动推送服务.
可以让移动开发者将信息从服务器直接推送到应用程序中,从而实现软件的主动更新、信息通知等服务。
优点
对于很多Android/ios/wp个人移动开发者来说,开发一个具有网络功能的应用不是一件容易的事,不仅需要购买/租赁服务器,还必须掌握一门诸如Java/.net/php这类的服务器开发语言,每开发一款移动应用程序,就必须开发维护对应的服务器程序。这一切对于移动开发者来说,都是一个冗长的噩梦。
如何让移动开发者从繁琐的机械劳动中解脱出来,将更多精力投入到移动应用程序的创意研发,从而不断提升产品质量呢?Bmob移动应用云存储平台的诞生就很好地解决了以上难题。
在Bmob平台上,您只需注册一个帐号,成功后申请创建任意多个数据库,获得对应的Key,下载对应版本的SDK并将其嵌入到移动应用中,便可以调用存取API,进行数据的任意操作。有了Bmob,您在5分钟内就可以学会如何开发一个云存储的移动应用软件,给应用软件快速添加一个安全灵活的后台管理系统,方便您浏览终端保存的各种信息。
总而言之,对我来说,它提供了个云端数据库给我用。不用再与服务器打交道。
开始
注册Bmob帐号
创建应用
注册完账号并且实名认证后,进入www.bomb.cn,点击右上角我的控制台,创建一个应用。
导入SDK
Android Studio新建一个安卓project。等待项目初始化完成后:
添加Bmob的maven仓库地址
在在
Project
的build.gradle
文件中添加maven {url 'https://dl.bintray.com/chaozhouzhang/maven' }
,注意位置不要放错allprojects { repositories { google() jcenter() //Bmob的maven仓库地址--必填 maven {url 'https://dl.bintray.com/chaozhouzhang/maven' } }
添加Bmob的SDK
在
app
的build.gradle
文件中dependencies添加依赖
:这里我们用
bomb-3.7.9-rc3
这个版本。//bmob implementation 'cn.bmob.android:bmob-sdk:3.7.9-rc3' implementation "io.reactivex.rxjava2:rxjava:2.2.8" implementation 'io.reactivex.rxjava2:rxandroid:2.1.1' implementation 'com.squareup.okio:okio:2.9.0' implementation 'com.google.code.gson:gson:2.8.6' implementation 'com.squareup.okhttp3:okhttp:4.9.0'
添加完成后,同步一下
Gradle
。
配置AndroidManifest.xml
在你的应用程序的AndroidManifest.xml
文件中添加相应的权限:
<!--允许联网 -->
<uses-permission android:name="android.permission.INTERNET" />
<!--获取GSM(2g)、WCDMA(联通3g)等网络状态的信息 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!--获取wifi网络状态的信息 -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!--保持CPU 运转,屏幕和键盘灯有可能是关闭的,用于文件上传和下载 -->
<uses-permission android:name="android.permission.WAKE_LOCK" />
<!--获取sd卡写的权限,用于文件上传和下载-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!--允许读取手机状态 用于创建BmobInstallation-->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
放在
配置ContentProvider
<provider
android:name="cn.bmob.v3.util.BmobContentProvider"
android:authorities="cn.com.jaav.bomb.BmobContentProvider">
</provider>
放在
获取Application ID
在你的应用列表中,点击应用 Key
,里面有个Application ID,复制它,我们后面要用到。
好了,配置到这里就完成了。下面开始操作数据库。
数据库
说到数据库,无非就是增删改查这些东西。Bmob提供了一套api给我们增删改查。
首先是表,bmob规定,数据库的表名必须和你的实体类名一致,并且字段也要一致。
你不必要在bmob控制台去手动创建表,只需要定义实体类就行,bmob会自动根据你的实体类帮你建表。
值得注意的是,bomb的表会自带几个字段,你不用去管他。
objectId:数据唯一标志
createdAt:数据创建时间
updatedAt:数据更新时间
ACL:数据控制访问权限
初始化
在你的MainActivity中初始化Bmob,在onCreate()方法中加入这一句,表示初始化Bmob。
Bmob.initialize(this, "cf06227cd1dfc38af285002eacde6fb3");
接着就是定义实体类了。这个实体类必须继承BmobObject。我这里定义一个Person表。
package cn.com.jaav.bomb.pojo;
import cn.bmob.v3.BmobObject;
/**
* @author Bryant
*/
public class Person extends BmobObject {
private String username;
private String password;
public Person() {
}
public Person(String username, String password) {
this.username = username;
this.password = password;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "Person{" +
"username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
}
Person表2个属性,见名知意。
插入数据:
Person person = new Person();
person.setUsername("张三");
person.setPassword("666666");
person.save(new SaveListener<String>() {
@Override
public void done(String objectId,BmobException e) {
if(e==null){
Toast.makeText(getApplicationContext(),"添加数据成功,返回objectId为:"+objectId,Toast.LENGTH_LONG).show();
}else{
Toast.makeText(getApplicationContext(),"创建数据失败:" + e.getMessage(),Toast.LENGTH_LONG).show();
}
}
});
删除数据:
Person p2 = new Person();
p2.setObjectId("6b6c11c537");
p2.delete(new UpdateListener() {
@Override
public void done(BmobException e) {
if(e==null){
toast("删除成功:"+p2.getUpdatedAt());
Toast.makeText(getApplicationContext(),"删除成功",Toast.LENGTH_LONG).show();
}else{
Toast.makeText(getApplicationContext(),"删除失败" + e.getMessage(),Toast.LENGTH_LONG).show();
}
}
});
修改数据:
//更新Person表里面id为6b6c11c537的数据,address内容更新为“北京朝阳”
Person p2 = new Person();
p2.setUsername("李四");
p2.update("6b6c11c537", new UpdateListener() {
@Override
public void done(BmobException e) {
if(e==null){
Toast.makeText(getApplicationContext(),"更新成功:"+p2.getUpdatedAt(),Toast.LENGTH_LONG).show();
}else{
Toast.makeText(getApplicationContext(),"更新失败:" + e.getMessage(),Toast.LENGTH_LONG).show();
}
}
});
查询数据:
//查找Person表里面id为6b6c11c537的数据
BmobQuery<Person> bmobQuery = new BmobQuery<Person>();
bmobQuery.getObject("6b6c11c537", new QueryListener<Person>() {
@Override
public void done(Person object,BmobException e) {
if(e==null){
Toast.makeText(getApplicationContext(),"查询成功",Toast.LENGTH_LONG).show();
}else{
Toast.makeText(getApplicationContext(),"查询失败:" + e.getMessage(),Toast.LENGTH_LONG).show();
}
}
});
有没有发现除了插入之外,其他几个都比较操蛋?特别是这个查询,我需要知道这个person的objectId,我才能去查询他。官方文档也说明了,查询一条记录必须根据objectId来查。但是对我们来说,这是极其不方便的,例如用户登录过程,你不可能知道他的objectId。我们可以把它当作多条数据查询。判断查询得到的list的长度为不为0,不为0即代表查询到了数据。
//查询
queryButton.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
String sql = "select *from Person where username = 'admin' ";
new BmobQuery<Person>().doSQLQuery(sql, new SQLQueryListener<Person>()
{
@Override
public void done(BmobQueryResult<Person> bmobQueryResult, BmobException e) {
if (e == null) {
List<Person> list = (List<Person>) bmobQueryResult.getResults();
if (list != null && list.size() > 0) {
for (int i = 0; i < list.size(); i++) {
Person person = list.get(i);
Toast.makeText(getApplicationContext(), person.getUsername() + " " + person.getPassword(), Toast.LENGTH_SHORT).show();
}
} else {
Toast.makeText(getApplicationContext(), "查询成功,但无数据", Toast.LENGTH_SHORT).show();
}
} else {
Toast.makeText(getApplicationContext(), "错误代码:" + e.getErrorCode() + " " + e.getMessage(), Toast.LENGTH_SHORT).show();
}
}
});
}
});
这里你可以灵活的拼接你的sql语句,但值得注意的是,模糊查询是用不了的,这个属于付费功能。
查询到了数据,你可以拿到他的objectId,你再修改,删除就相对容易多了。
文件上传
这个功能是需要绑定一个已备案的域名的,否则无法使用!而且,推荐使用bomb-3.7.9-rc3
这个版本的sdk,因为我已经踩过坑了。之前用的3.7.7版本报错乱码了。
绑定域名
在控制台,进入你的应用,点击左侧设置
->域名管理
。
域名有https证书的话,填写证书的key和pem就可以,没有就不用写。
域名绑定详细步骤我就不多说了,我之前文章里也有写。
上传
文件路径选择你模拟器里文件的路径。
String picPath = "sdcard/temp.jpg";
BmobFile bmobFile = new BmobFile(new File(picPath));
bmobFile.uploadblock(new UploadFileListener() {
@Override
public void done(BmobException e) {
if(e==null){
//bmobFile.getFileUrl()--返回的上传文件的完整地址
Toast.makeText(getApplicationContext(), "上传文件成功:" + bmobFile.getFileUrl(), Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(getApplicationContext(), "上传文件失败:" + e.getMessage(), Toast.LENGTH_SHORT).show();
}
}
@Override
public void onProgress(Integer value) {
// 返回的上传进度(百分比)
// TODO
}
});
文件上传成功后会返回一个图片的url给你。图片可以在你的应用里面的“素材”里看到。
参考bmob官方文档: http://doc.bmob.cn/data/android/