android用bmob实现评论,Bmob在Android上的应用

前言

一直很困惑,android到底能不能将本地数据传到一个公共的云端,让云端实现数据库功能,这样的话,我们的单击版就能实现“联网”了。于是就产生了此篇文章。

本文参考以下链接

bmob官网

bmob官网开发文档

bmob是一个集结多种功能的第三方平台,今天我们主要讲数据存储,今天的内容涉及以下内容:

bmob后台介绍

bmob配置

bmob的封装

bmob的初始化

bmob对于数据处理的方式

bmob处理数据

bmob云端查看数据

一. bmob后台介绍

进入bmob官网注册账号,然后点击"我的控制台"

e4ca46a4e6c3

image.png

进入

e4ca46a4e6c3

image.png

然后创建应用,应用创建成功后,点击应用,进入应用界面,点击设置

e4ca46a4e6c3

image.png

进去后便可以看到应用的 ApplicationID等相关信息,这个在后面会用到。及此,对于bmob后台的简单介绍已经完毕

二. bmob配置

首先在你的project的builder.gradle中添加依赖:

buildscript {

repositories {

google()

jcenter()

}

dependencies {

classpath 'com.android.tools.build:gradle:3.0.0'

}

}

allprojects {

repositories {

google()

jcenter()

//Bmob的maven仓库地址--必填

maven { url "https://raw.github.com/bmob/bmob-android-sdk/master" }

}

}

task clean(type: Delete) {

delete rootProject.buildDir

}

然后在 app对应的 build.gradle中添加依赖:

apply plugin: 'com.android.application'

android {

compileSdkVersion 22

buildToolsVersion '22.0.1'

**兼容Android6.0系统所需,如果这句话报错,可在dependencies标签下使用compile 'cn.bmob.android:http-legacy:1.0'**

useLibrary 'org.apache.http.legacy'

...

}

dependencies {

//以下SDK开发者请根据需要自行选择

//bmob-sdk:Bmob的android sdk包,包含了Bmob的数据存储、文件等服务,以下是最新的bmob-sdk:

//3.5.5:请务必查看下面注释[1]

compile 'cn.bmob.android:bmob-sdk:3.5.5'

//如果你想应用能够兼容Android6.0,请添加此依赖(org.apache.http.legacy.jar)

compile 'cn.bmob.android:http-legacy:1.0'

...

}

三.bmob的封装

我将bmob的初始化封装到BmobDBHelper类中,代码如下:

package com.android.helper;

import android.content.Context;

import cn.bmob.v3.Bmob;

import cn.bmob.v3.BmobConfig;

/**

* Title:Bmob数据存储帮助类

* Description:

*

* Created by pei

* Date: 2018/2/27

*/

public class BmobDBHelper {

//这里APPLICATION_ID写你自己应用的ApplicationID

private static final String APPLICATION_ID="XXXXXXXXX";

private BmobDBHelper() {

}

private static class Holder {

private static BmobDBHelper instance = new BmobDBHelper();

}

public static BmobDBHelper getInstance() {

return Holder.instance;

}

/**初始化**/

public void init(Context context){

//自v3.4.7版本开始,设置BmobConfig,允许设置请求超时时间、文件分片上传时每片的大小、文件的过期时间(单位为秒),

BmobConfig config = new BmobConfig.Builder(context)

.setApplicationId(APPLICATION_ID)//设置appkey

// .setConnectTimeout(30)//请求超时时间(单位为秒):默认15s

// .setUploadBlockSize(1024*1024)//文件分片上传时每片的大小(单位字节),默认512*1024

// .setFileExpiration(2500)//文件的过期时间(单位为秒):默认1800s

.build();

Bmob.initialize(config);

}

}

上面的APPLICATION_ID写你自己应用的ApplicationID

四.bmob的初始化

在你自己的application中初始化bmob

public class AppContext extends Application{

@Override

public void onCreate() {

super.onCreate();

//bmob数据库初始化

BmobDBHelper.getInstance().init(this);

}

五. bmob对于数据处理的方式

bmob对于数据的增删改查同样遵循orm,即数据是以操作对象的方式来进行增删改查的,并且操作对象需要继承于bmob机制中的一个BmobObject类,下面以Person类为例,我们需要向服务器存储用户的昵称,年龄以及是否为会员,则Person可以这样写:

package com.android.model;

import cn.bmob.v3.BmobObject;

/**

* Title:

* Description:

*

* Created by pei

* Date: 2018/2/27

*/

public class Person extends BmobObject {

private String nickName;

private Integer age;

private Boolean isVip;

public String getNickName() {

return nickName;

}

public void setNickName(String nickName) {

this.nickName = nickName;

}

public Integer getAge() {

return age;

}

public void setAge(Integer age) {

this.age = age;

}

public Boolean getVip() {

return isVip;

}

public void setVip(Boolean vip) {

isVip = vip;

}

}

六. bmob处理数据

数据的处理无非就是增删改查,下面做详细讲解

6.1 添加单条数据

private void insert(){

Person person=new Person();

person.setNickName("大grds");

person.setAge(20);

person.setVip(false);

person.save(new SaveListener() {

@Override

public void done(String objectId, BmobException e) {

if(e==null){

//添加成功

LogUtil.e(MainActivity.class,"========objectId="+objectId);

}else{

//添加失败

LogUtil.e(MainActivity.class,"========e="+e.getErrorCode()+" errorMessage="+e.getMessage());

}

}

});

}

6.2 更新单条数据

每条数据添加后,在后端云会形成一个ObjectId,即唯一id,操作单条数据的时候根据ObjectId进行更新,下面代码中的“XXXXXX”即为对应数据的ObjectId

private void update(){

Person p=new Person();

p.setAge(80);

p.update("XXXXXX", new UpdateListener() {

@Override

public void done(BmobException e) {

if(e==null){

LogUtil.e(MainActivity.class,"===更新成功===");

}else{

LogUtil.e(MainActivity.class,"更新失败:"+e.getMessage()+","+e.getErrorCode());

}

}

});

}

6.3 删除单条数据

下面的“objectId”为云数据库中对应数据的唯一id

/**删除整条数据**/

private void deleteObject(){

Person p=new Person();

p.setObjectId("objectId");

p.delete(new UpdateListener() {

@Override

public void done(BmobException e) {

if(e==null){

LogUtil.e(MainActivity.class,"===删除成功===");

}else{

LogUtil.e(MainActivity.class,"删除失败:"+e.getMessage()+","+e.getErrorCode());

}

}

});

}

6.4 删除单条数据中的某个属性

例如我要删掉objectId=“qiueoieqc”的person数据中的age信息,我可以这样操作:

/**删除单条数据中的某个信息**/

private void deleteAttribute(){

Person p=new Person();

p.setObjectId("qiueoieqc");

p.remove("age");

p.update(new UpdateListener() {

@Override

public void done(BmobException e) {

if(e==null){

LogUtil.e(MainActivity.class,"===删除属性成功===");

}else{

LogUtil.e(MainActivity.class,"删除属性失败:"+e.getMessage()+","+e.getErrorCode());

}

}

});

}

bmob同样支持批量操作,接着往下讲

6.5 批量添加

增加多条数据,你可以这样操作:

/**批量添加**/

private void insertList(){

//注:泛型要写BmobObject,不能写Person

ListpersonList=new ArrayList<>();

for(int i=0;i<3;i++){

Person person=new Person();

person.setNickName("小花"+i);

personList.add(person);

}

new BmobBatch().insertBatch(personList).doBatch(new QueryListListener() {

@Override

public void done(List list, BmobException e) {

for(int i=0;i

BatchResult result = list.get(i);

BmobException ex =result.getError();

if(ex==null){

LogUtil.e("第"+i+"个数据批量添加成功:"+result.getCreatedAt()+","+result.getObjectId()+","+result.getUpdatedAt());

}else{

LogUtil.e("第"+i+"个数据批量添加失败:"+ex.getMessage()+","+ex.getErrorCode());

}

}

}

});

}

需要注意的是

ListpersonList=new ArrayList<>();

中泛型必须用Person的父类BmobObject,不能直接用Person,否则接下来的代码会报错。

6.6 批量更新

更新多条数据,你可以这样:

/**批量更新**/

private void updateList(){

//注:泛型要写BmobObject,不能写Person

ListpersonList=new ArrayList<>();

Person person1=new Person();

person1.setObjectId("1cd61bcbe6");

person1.setAge(21);

Person person2=new Person();

person2.setObjectId("7ac232f13e");

person2.setAge(22);

Person person3=new Person();

person3.setObjectId("31ff64b2bd");

person3.setAge(23);

personList.add(person1);

personList.add(person2);

personList.add(person3);

new BmobBatch().updateBatch(personList).doBatch(new QueryListListener() {

@Override

public void done(List list, BmobException e) {

if(e==null){

for(int i=0;i

BatchResult result = list.get(i);

BmobException ex =result.getError();

if(ex==null){

LogUtil.e("第"+i+"个数据批量更新成功:"+result.getUpdatedAt());

}else{

LogUtil.e("第"+i+"个数据批量更新失败:"+ex.getMessage()+","+ex.getErrorCode());

}

}

}else{

LogUtil.e("bmob","失败:"+e.getMessage()+","+e.getErrorCode());

}

}

});

}

6.7 批量删除

/**批量删除**/

private void deleteList(){

//注:泛型要写BmobObject,不能写Person

ListpersonList=new ArrayList<>();

Person person1=new Person();

person1.setObjectId("31ff64b2bd");

Person person2=new Person();

person2.setObjectId("7ac232f13e");

Person person3=new Person();

person3.setObjectId("1cd61bcbe6");

Person person4=new Person();

person4.setObjectId("0aa285d0ac");

Person person5=new Person();

person5.setObjectId("eea3673beb");

Person person6=new Person();

person6.setObjectId("7e6b41915a");

Person person7=new Person();

person7.setObjectId("4d4ab16631");

personList.add(person1);

personList.add(person2);

personList.add(person3);

personList.add(person4);

personList.add(person5);

personList.add(person6);

personList.add(person7);

new BmobBatch().deleteBatch(personList).doBatch(new QueryListListener() {

@Override

public void done(List o, BmobException e) {

if(e==null){

for(int i=0;i

BatchResult result = o.get(i);

BmobException ex =result.getError();

if(ex==null){

LogUtil.e("第"+i+"个数据批量删除成功");

}else{

LogUtil.e("第"+i+"个数据批量删除失败:"+ex.getMessage()+","+ex.getErrorCode());

}

}

}else{

Log.i("bmob","失败:"+e.getMessage()+","+e.getErrorCode());

}

}

});

}

bmob还支持多个操作依次进行,最后提交的处理

6.8 批量添加、批量更新、批量删除同步提交

/**批量添加、批量更新、批量删除同步提交**/

private void controList(){

LogUtil.e(MainActivity.class,"=======批量添加、批量更新、批量删除=======");

BmobBatch batch =new BmobBatch();

//批量添加

List persons = new ArrayList();

Person person = new Person();

person.setNickName("张三 ");

persons.add(person);

batch.insertBatch(persons);

//批量更新

List persons1=new ArrayList();

Person p1 = new Person();

p1.setObjectId("ec4886adaa");

p1.setAge(35);

persons1.add(p1);

batch.updateBatch(persons1);

//批量删除

List persons2 = new ArrayList();

Person p2 = new Person();

p2.setObjectId("5798716e7f");

persons2.add(p2);

batch.deleteBatch(persons2);

//执行批量操作

batch.doBatch(new QueryListListener() {

@Override

public void done(List list, BmobException e) {

if(e==null){

//返回结果的results和上面提交的顺序是一样的,请一一对应

for(int i=0;i

BatchResult result= list.get(i);

if(result.isSuccess()){//只有批量添加才返回objectId

LogUtil.e("第"+i+"个成功:"+result.getObjectId()+","+result.getUpdatedAt());

}else{

BmobException error= result.getError();

LogUtil.e("第"+i+"个失败:"+error.getErrorCode()+","+error.getMessage());

}

}

}else{

LogUtil.e("bmob","失败:"+e.getMessage()+","+e.getErrorCode());

}

}

});

}

6.9 单条数据查询

/**单个查询**/

private void checkByObjectId(){

new BmobQuery().getObject("5798716e7f", new QueryListener() {

@Override

public void done(Person person, BmobException e) {

if(e==null){

//获得createdAt数据创建时间(注意是:createdAt,不是createAt)

LogUtil.e(MainActivity.class,"======person getNickName="+person.getNickName()+" getObjectId="+person.getObjectId()+" getCreatedAt="+person.getCreatedAt());

}else{

LogUtil.e("bmob","失败:"+e.getMessage()+","+e.getErrorCode());

}

}

});

}

6.10 查询多条数据

最多支持一次查询500条数据

/**查询多条数据,查询的数据条数最多500**/

private void checkList(){

BmobQuery query = new BmobQuery();

//查询playerName叫“比目”的数据

query.addWhereEqualTo("nickName", "大鱼");

//返回50条数据,如果不加上这条语句,默认返回10条数据

query.setLimit(50);

//执行查询方法

query.findObjects(new FindListener() {

@Override

public void done(List object, BmobException e) {

if(e==null){

for (Person person : object) {

//获得createdAt数据创建时间(注意是:createdAt,不是createAt)

LogUtil.e(MainActivity.class,"==kk====person getNickName="+person.getNickName()+" getObjectId="+person.getObjectId()+" getCreatedAt="+person.getCreatedAt());

}

}else{

Log.i("bmob","失败:"+e.getMessage()+","+e.getErrorCode());

}

}

});

}

这里需要解释下,其实关于bmob的查询还有很多情况,这里就不详细讲解了,因为关于数据库的查询操作本来就是变化万千,最头疼的一环,大家可以参看bmob官网开发文档做更多了解

七. bmob云端查看数据

数据添加了,删除了什么的,肯定想看看结果了,这时你可以登录你的bmob后端云,然后进入你的控制台,进入你的应用,点击左侧数据,然后点击Person表(表名一般以对象名称形成,区分大小写),即可看到你的数据,如下图:

e4ca46a4e6c3

image.png

ok,今天的内容就讲到这里了,谢谢诶。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值