bmob后端云


Bmob

什么是bomb后端云?

介绍

《Bmob》是一个可以开发云存储的移动应用软件,给应用软件快速添加一个安全灵活的后台管理系统,方便浏览终端保存的各种信息。针对移动应用开发的特性,Bmob还提供了主动推送服务.

可以让移动开发者将信息从服务器直接推送到应用程序中,从而实现软件的主动更新、信息通知等服务。

优点

对于很多Android/ios/wp个人移动开发者来说,开发一个具有网络功能的应用不是一件容易的事,不仅需要购买/租赁服务器,还必须掌握一门诸如Java/.net/php这类的服务器开发语言,每开发一款移动应用程序,就必须开发维护对应的服务器程序。这一切对于移动开发者来说,都是一个冗长的噩梦。

如何让移动开发者从繁琐的机械劳动中解脱出来,将更多精力投入到移动应用程序的创意研发,从而不断提升产品质量呢?Bmob移动应用云存储平台的诞生就很好地解决了以上难题。

在Bmob平台上,您只需注册一个帐号,成功后申请创建任意多个数据库,获得对应的Key,下载对应版本的SDK并将其嵌入到移动应用中,便可以调用存取API,进行数据的任意操作。有了Bmob,您在5分钟内就可以学会如何开发一个云存储的移动应用软件,给应用软件快速添加一个安全灵活的后台管理系统,方便您浏览终端保存的各种信息。

总而言之,对我来说,它提供了个云端数据库给我用。不用再与服务器打交道。

开始

注册Bmob帐号

在网址栏输入www.bmob.cn或者在百度输入Bmob进行搜索,打开Bmob官网后,点击右上角的“注册”,在跳转页面填入你的姓名、邮箱、设置密码,确认后到你的邮箱激活Bmob账户,你就可以用Bmob轻松开发应用了。

创建应用

注册完账号并且实名认证后,进入www.bomb.cn,点击右上角我的控制台,创建一个应用。

导入SDK

Android Studio新建一个安卓project。等待项目初始化完成后:

  1. 添加Bmob的maven仓库地址

    在在 Projectbuild.gradle 文件中添加maven {url 'https://dl.bintray.com/chaozhouzhang/maven' },注意位置不要放错

    allprojects {
        repositories {
            google()
            jcenter()
            //Bmob的maven仓库地址--必填
            maven {url 'https://dl.bintray.com/chaozhouzhang/maven'         }
    }
  2. 添加Bmob的SDK

    appbuild.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/


文章作者: 布莱恩特科比酱
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 布莱恩特科比酱 !
评论
  目录