Bmob 后端云 全方位一体化的后端服务平台
无需再造应用后端服务 轻松拥有开发中需要的各种后端能力

功能比较多,常用的比如数据库、推送统计、IM即时通讯、短信等
本文主要介绍集成和云数据库的基本使用,文档写的很详细,而且还有demo和视频教程。

Bmob:http://www.bmob.cn/
文档:http://doc.bmob.cn/data/android/index.html

创建应用

注册就不用说了吧。。

注册之后选择创建应用

这里写图片描述

创建之后,点击你的应用

这里写图片描述

这个时候可以看到已经默认建了一个user表,但是没有数据,上面的菜单栏也可以直接进行增删改查操作

这里写图片描述

左边导航栏的最下面有个设置,点击可以查看application id,初始化会用到

这里写图片描述

集成

1.在 Project 的 build.gradle 文件中添加 Bmob的maven仓库地址,注释部分
allprojects {
    repositories {
        google()
        jcenter()
        //Bmob的maven仓库地址--必填
        maven { url "https://raw.github.com/bmob/bmob-android-sdk/master" }
    }
}
2.在app的build.gradle文件中添加compile依赖文件,注释部分
apply plugin: 'com.android.application'

android {
    compileSdkVersion 26
    defaultConfig {
        applicationId "com.yechaoa.mybmob"
        minSdkVersion 16
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    //兼容6.0
    useLibrary 'org.apache.http.legacy'
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:26.1.0'
    implementation 'com.android.support.constraint:constraint-layout:1.0.2'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.1'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'


    //以下SDK开发者请根据需要自行选择
    //bmob-sdk:Bmob的android sdk包,包含了Bmob的数据存储、文件等服务,以下是最新的bmob-sdk:
    //3.5.5:请务必查看下面注释[1]
    compile 'cn.bmob.android:bmob-sdk:3.5.5'

    //bmob-push:Bmob的推送包
    compile 'cn.bmob.android:bmob-push:0.8'

}
3.配置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" />
4.初始化BmobSDK

在你应用程序启动的Activity的onCreate()方法中初始化Bmob功能。代码如下所示:
这里注意换成你的application id

package com.bmob.example;
import cn.bmob.v3.Bmob;
import android.app.Activity;
import android.os.Bundle;
public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
         // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
         //提供以下两种方式进行初始化操作:

        //第一:默认初始化
        Bmob.initialize(this, "Your Application ID");
        // 注:自v3.5.2开始,数据sdk内部缝合了统计sdk,开发者无需额外集成,传渠道参数即可,不传默认没开启数据统计功能
        //Bmob.initialize(this, "Your Application ID","bmob");

        //第二:自v3.4.7版本开始,设置BmobConfig,允许设置请求超时时间、文件分片上传时每片的大小、文件的过期时间(单位为秒),
        //BmobConfig config =new BmobConfig.Builder(this)
        设置appkey
        //.setApplicationId("Your Application ID")
        请求超时时间(单位为秒):默认15s
        //.setConnectTimeout(30)
        文件分片上传时每片的大小(单位字节),默认512*1024
        //.setUploadBlockSize(1024*1024)
        文件的过期时间(单位为秒):默认1800s
        //.setFileExpiration(2500)
        //.build();
        //Bmob.initialize(config);
    }
}

ok,到这里集成工作就完成了。基本上不会遇到问题。

基本使用

1.添加一条数据

新建Person类,必须继承BmobObject对象,Person也是对应的数据库的表名,可以改,看下面注释。

package com.yechaoa.mybmob;

import cn.bmob.v3.BmobObject;

/**
 * Created by yechao on 2018/2/9.
 * Describe :
 */
public class Person extends BmobObject {

    private String name;
    private String address;

    //这时候表名就是T_a_b,而不是Person
    //当然了,除了在构造函数中直接调用setTableName方法之外,你还可以在GameScore的实例中动态调用setTableName方法。
    //需要注意的是查询的结果是JSONArray,需要自行解析JSONArray中的数据。
//    public Person() {
//        this.setTableName("T_a_b");
//    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }
}

调用save方法添加数据,添加成功之后会返回objectId,唯一标识,后续删改查都会用到

    private void initSaveData() {
        Person p2 = new Person();
        p2.setName("yechaoa");
        p2.setAddress("上海浦东");
        p2.save(new SaveListener<String>() {
            @Override
            public void done(String objectId, BmobException e) {
                if (e == null) {
                    toast("添加数据成功,返回objectId为:" + objectId);
                    mTextView.setText("添加数据成功,返回objectId为:" + objectId);
                } else {
                    toast("创建数据失败:" + e.getMessage());
                    mTextView.setText("创建数据失败:" + e.getMessage());
                }
            }
        });
    }

刷新控制台可以看到,多了一个Person表,且有一条数据,就是刚才插入的。

这里写图片描述

2.查询多条数据
private void queryList() {
        BmobQuery<Person> query = new BmobQuery<Person>();
        //查询name叫“yechaoa”的数据
        query.addWhereEqualTo("name", "yechaoa");
        //返回50条数据,如果不加上这条语句,默认返回10条数据
        query.setLimit(50);
        //执行查询方法
        query.findObjects(new FindListener<Person>() {
            @Override
            public void done(List<Person> object, BmobException e) {
                if (e == null) {
                    toast("查询成功:共" + object.size() + "条数据。");
                    mTextView.setText("查询成功:共" + object.size() + "条数据。");
                    for (Person person : object) {
                        //获得name的信息
                        person.getName();
                        //获得数据的objectId信息
                        person.getObjectId();
                        //获得createdAt数据创建时间(注意是:createdAt,不是createAt)
                        person.getCreatedAt();
                    }
                } else {
                    toast("失败:" + e.getMessage() + "," + e.getErrorCode());
                    mTextView.setText("失败:" + e.getMessage() + "," + e.getErrorCode());
                }
            }
        });
    }

有查询条件、分页,也有联表查、模糊查找等等,尽在官方文档。


github:https://github.com/yechaoa/MyBmob

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐