提前说明,本文档主要是根据bmob的官网文档进行修改而来,如果可以,大家最好直接去看官网文档

http://docs.bmob.cn/android/faststart/index.html?menukey=fast_start&key=start_android

1·注册www.bmob.com

2创建应用
3获取秘钥下载sdk(http://www.bmob.cn/downloads#android_sdk)
4导入sdk
两种方式:
一种是将我们下载的sdk放到lib目录下面//详细步骤忽略,如果需要去官网查看
一种是在gradle中进行配置,推荐使用
    1)在Projectbuild.gradle文件中添加Bmob的maven仓库地址
 
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:1.2.3'
}
}
 
allprojects {
repositories {
jcenter()
//Bmob的maven仓库地址,必须填写
maven { url "https://raw.github.com/bmob/bmob-android-sdk/master" }
}
}
2)在appbuild.gradle文件中添加compile依赖文件
 
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'
 
defaultConfig {
applicationId "cn.bmob.android"
minSdkVersion 14
targetSdkVersion 22
versionCode 1
versionName "1.0"
}
...
}
 
 
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
 
//以下SDK开发者请根据需要自行选择
//bmob-sdk:Bmob的android sdk包,包含了Bmob的数据存储、文件等服务,以下是最新的bmob-sdk:
 
//3.4.7-aar:具务必查看下面注释[1]
compile 'cn.bmob.android:bmob-sdk:3.4.7-aar'
 
//bmob-push:Bmob的推送包
compile 'cn.bmob.android:bmob-push:0.8'
 
//bmob-im:Bmob的即时通讯包,注意每个版本的im依赖特定版本的bmob-sdk,具体的依赖关系可查看下面注释[3]
compile 'cn.bmob.android:bmob-im:2.0.4'
compile 'cn.bmob.android:androidasync:2.1.6'
compile 'cn.bmob.android:bmob-sdk:3.4.6'
//注:别忘记导入3.4.6的相关依赖包[2]
 
//bmob-sms :Bmob单独为短信服务提供的包
compile 'cn.bmob.android:bmob-sms:1.0.1'
 
//如果你想应用能够兼容Android6.0,请添加此依赖(org.apache.http.legacy.jar)
compile 'cn.bmob.android:http-legacy:1.0'
}
5设置权限
<!--允许联网 -->
<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" />
6初始化sdk
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
//提供以下两种方式进行初始化操作:
//第一:默认初始化
Bmob.initialize(this, "Your Application ID");
 
//第二:设置BmobConfig,允许设置请求超时时间、文件分片上传时每片的大小、文件的过期时间(单位为秒),自v3.4.7版本开始
//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);
 
}

7 添加数据
创建javabean  有自己的getset方法,继承自BmobObject(对应后台的数据表)
public class Person extends BmobObject {
private String name;
private String address;
 
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;
}
}

尽可能的使用Interger,Boolean等包装类,而不是使用基本数据类型
主要原因,我们要传对象而不是基本数据类型
int 放的是基本数据类型,而Interger是一个复杂数据类型,放的是一个引用
初始化  int初始化是0,Interger是null
Interger是int的封装类
泛型的时候我们用的是Interger
然后进行
增 对象.save(this,SaveListener);
删 对象.delete(this,DeleteListener);
改 对象.update(this,id,UpdataListener)
查 对象getObject(this,id,GetListenet<JavaBean>)
数据
//添加数据
Person p2 = new Person();
p2.setName("lucky");
p2.setAddress("北京海淀");
//或者使用这种方式
//p2.setValue(Address,"北京海淀");
p2.save(this, new SaveListener() {
@Override
public void onSuccess() {
// TODO Auto-generated method stub
toast("添加数据成功,返回objectId为:"+p2.getObjectId());
}
 
@Override
public void onFailure(int code, String msg) {
// TODO Auto-generated method stub
toast("创建数据失败:" + msg);
}
});
 
//查询数据
//查找Person表里面id为6b6c11c537的数据
BmobQuery<Person> bmobQuery = new BmobQuery<Person>();
bmobQuery.getObject(this, "6b6c11c537", new GetListener<Person>() {
@Override
public void onSuccess(Person object) {
// TODO Auto-generated method stub
toast("查询成功");
}
 
@Override
public void onFailure(int code, String msg) {
// TODO Auto-generated method stub
toast("查询失败:" + msg);
}
});
 
//修改数据
//更新Person表里面id为6b6c11c537的数据,address内容更新为“北京朝阳”
Person p2 = new Person();
p2.setAddress("北京朝阳");
p2.update(this, "6b6c11c537", new UpdateListener() {
@Override
public void onSuccess() {
// TODO Auto-generated method stub
toast("更新成功:" + p2.getUpdatedAt());
}
@Override
public void onFailure(int code, String msg) {
// TODO Auto-generated method stub
toast("更新失败:" + msg);
}
});
 
//删除数据
Person p2 = new Person();
p2.setObjectId("6b6c11c537");
p2.delete(this, new DeleteListener() {
@Override
public void onSuccess() {
// TODO Auto-generated method stub
toast("删除成功");
}
 
@Override
public void onFailure(int code, String msg) {
// TODO Auto-generated method stub
toast("删除失败:" + msg);
}
});

如果是删除一个对象中的一个字段的值,用remove操作
GameScore gameScore = new GameScore();
gameScore.setObjectId("dd8e6aff28");
gameScore.remove("score"); // 删除GameScore对象中的score字段
gameScore.update(this, new UpdateListener() {
@Override
public void onSuccess() {
// TODO Auto-generated method stub
Log.i("bmob","删除GameScore对象中的score字段成功");
}
@Override
public void onFailure(int code, String msg) {
// TODO Auto-generated method stub
Log.i("bmob","删除GameScore对象中的score字段失败:"+msg);
}
});

批量的数据操作(list中的数据,不超过50条)
insertBatch    updateBatch, deleteBatch  批量的添加更新删除
insertBatch的使用方式如下:
List<BmobObject> persons = new ArrayList<BmobObject>();
for (int i = 0; i < 3; i++) {
Person person = new Person();
person.setName("张三 "+i);
person.setAddress("上海朝阳路"+i+"号");
person.setGpsAdd(new BmobGeoPoint(112.934755, 24.52065));
person.setUploadTime(new BmobDate(new Date()));
List<String> hobbys = new ArrayList<String>();
hobbys.add("阅读");
hobbys.add("篮球");
hobbys.add("唱歌");
person.setHobby(hobbys);
person.setBankCard(new BankCard("中国银行", "176672673687545097"+i));
persons.add(person);
}
new BmobObject().insertBatch(this, persons, new SaveListener() {
@Override
public void onSuccess() {
// TODO Auto-generated method stub
toast("批量添加成功");
}
@Override
public void onFailure(int code, String msg) {
// TODO Auto-generated method stub
toast("批量添加失败:"+msg);
}
});
updateBatch的使用方式如下:
List<BmobObject> persons = new ArrayList<BmobObject>();
Person p1 = new Person();
p1.setObjectId("e51d651c22");
p1.setAge(25);
Person p2 = new Person();
p2.setObjectId("3f70a922c4");
p2.setAge(26);
p2.setGender(false);
Person p3 = new Person();
p3.setObjectId("08fdd55765");
p3.setAge(27);
 
persons.add(p1);
persons.add(p2);
persons.add(p3);
 
new BmobObject().updateBatch(this, persons, new UpdateListener() {
@Override
public void onSuccess() {
// TODO Auto-generated method stub
toast("批量更新成功");
}
@Override
public void onFailure(int code, String msg) {
// TODO Auto-generated method stub
toast("批量更新失败:"+msg);
}
});
deleteBatch的使用方式如下:
List<BmobObject> persons = new ArrayList<BmobObject>();
Person p1 = new Person();
p1.setObjectId("38ea274d0c");
Person p2 = new Person();
p2.setObjectId("01e29165bc");
Person p3 = new Person();
p3.setObjectId("d8226c4828");
 
persons.add(p1);
persons.add(p2);
persons.add(p3);
 
new BmobObject().deleteBatch(this, persons, new DeleteListener() {
@Override
public void onSuccess() {
// TODO Auto-generated method stub
toast("批量删除成功");
}
@Override
public void onFailure(int code, String msg) {
// TODO Auto-generated method stub
toast("批量删除失败:"+msg);
}
});

查询单条数据

当我们知道某条数据的objectId时,就可以根据objectId直接获取单条数据对象。例如:查询objectIda203eba875的人员信息。

BmobQuery<GameScore> query = new BmobQuery<GameScore>();
query.getObject(this, "a203eba875", new GetListener<GameScore>() {@Overridepublic void onSuccess(GameScore object) {// TODO Auto-generated method stubtoast("查询成功:");//获得playerName的信息object.getPlayerName();//获得数据的objectId信息object.getObjectId();//获得createdAt数据创建时间(注意是:createdAt,不是createAt)object.getCreatedAt();}@Overridepublic void onFailure(int code, String arg0) {// TODO Auto-generated method stubtoast("查询失败:"+arg0);}});

查询多条数据

查询某个数据表中的所有数据是非常简单的查询操作,例如:查询GameScore表中playerName为“比目”的50条数据记录。

BmobQuery<GameScore> query = new BmobQuery<GameScore>();//查询playerName叫“比目”的数据
query.addWhereEqualTo("playerName", "比目");//返回50条数据,如果不加上这条语句,默认返回10条数据
query.setLimit(50);//执行查询方法
query.findObjects(this, new FindListener<GameScore>() {@Overridepublic void onSuccess(List<GameScore> object) {// TODO Auto-generated method stubtoast("查询成功:共"+object.size()+"条数据。");for (GameScore gameScore : object) {//获得playerName的信息gameScore.getPlayerName();//获得数据的objectId信息gameScore.getObjectId();//获得createdAt数据创建时间(注意是:createdAt,不是createAt)gameScore.getCreatedAt();}}@Overridepublic void onError(int code, String msg) {// TODO Auto-generated method stubtoast("查询失败:"+msg);}});

更多的查询问题看学习笔记(2)
如果这里是特殊对象 用户管理,消息推送,acl和角色
支持的数据类型

目前为止,Bmob支持的数据类型:String、Integer、Float、Short、Byte、Double、Character、Boolean、Object、Array。
同时也支持BmobObject、BmobDate、BmobGeoPoint、BmobFile特有的数据类型。

以下为Web端类型与SDK端支持的JAVA类型对应表:

Web端类型 支持的JAVA类型 说明
Number Integer、Float、Short、Byte、Double、Character 对应数据库的Number类型
Array List 数组类型
File BmobFile Bmob特有类型,用来标识文件类型
GeoPoint BmobGeoPoint Bmob特有类型,用来标识地理位置
Date BmobDate Bmob特有类型,用来标识日期类型
Pointer 特定对象 Bmob特有类型,用来标识指针类型
Relation BmobRelation Bmob特有类型,用来标识数据关联

来源: http://docs.bmob.cn/android/developdoc/index.html?menukey=develop_doc&key=develop_android
类名和表名的关系
推荐使用完全一致的映射的使用方式 。就是javaBean的名字
       如果想不一致的话,可以在这个javabean的构造方法中进行更改
//GameScore是我们的javaBean的名字
public GameScore() {
this.setTableName("T_a_b");
}

或者我们用这个实例的时候使用setTableName来动态的进行更改

8通知消息,用notification来进行通知
在android6.0 中使用建造者模式来进行识别build模式
NotificationManager notificationManager = (NotificationManager) mContext
.getSystemService(Context.NOTIFICATION_SERVICE);
PendingIntent pi = PendingIntent.getActivity(mContext, 0,
new Intent(MainActivity.this, MainActivity.class), 0);
NotificationCompat.Builder builder = new NotificationCompat.Builder(mContext)
.setTicker("更新啦")
.setContentTitle("标题")
.setContentText("内容")
.setSmallIcon(R.drawable.ic_launcher);
Notification notification = builder.build();
notificationManager.notify(0, notification);

9原子计数器
例如文章点赞的功能,或者大量用户集中并发操作
//注意我们对应web后天的Number类型的字段,即javaBeans数据对象中的Interger对象类型
gameScore.increment("score"); // 分数递增1
gameScore.update(this, updateListener);
//您还可以通过increment(key, amount)方法来递增或递减任意幅度的数字
 
gameScore.increment("score", 5); // 分数递增5
//gameScore.increment("score", -5); // 分数递减5
gameScore.update(this, updateListener);
暂时就是这些,剩下的之后慢慢来。

bmob 快速搭建后台相关推荐

  1. 通过xadmin或者suit-v2快速搭建后台管理系统

    2019独角兽企业重金招聘Python工程师标准>>> 一.xadmin安装和注册使用 pip install xadmin#pip升级后这种安装就报错 python -m pip ...

  2. node快速搭建后台

    node快速搭建后台 1.首先安装node,express,express-generator (4.x版本把generator分离出来了所以需要单独安装) 2.进入项目文件输入命令express 项 ...

  3. php快速搭建后台,基于thinkphp的后台管理系统模板快速搭建,thinkphp后台模板_PHP教程...

    基于thinkphp的后台管理系统模板快速搭建,thinkphp后台模板 当我们在搭建网站的时候,后端开发人员在编写后台的管理系统的时候,往往会因为缺少一个合适的后台管理系统的模板,而必须去重新编写一 ...

  4. python 极速后台开发框架_基于FastAdmin快速搭建后台管理系统

    [课程简介] FastAdmin是一款基于ThinkPHP5+Bootstrap的极速后台开发框架.本课程从安装.架构.一键生成.数据库.控制器.模块.前端组件等方面,对如何使用FastAdmin框架 ...

  5. guns快速搭建后台管理系统

    最近开发一个新项目,作为一个后台不得不说,项目拿到手我最不想写的模块就是后台管理系统,感觉就和裹脚布一样又臭又长,无穷无尽的增删查,想想就觉得没意思,但是写项目又逃不开它,没办法尽量找一个方便使用的后 ...

  6. 极光推送零基础极速上手开发指南,快速搭建后台推送服务

    一.基础配置 1.依赖配置 <!-- 极光推送开始 --> <dependency><groupId>cn.jpush.api</groupId>< ...

  7. 快速搭建后台框架D2admin项目实战(1)

    一.项目背景 最近要写个有关合同管理的业务系统 发现UI页面非常多,但是又大部分交互差不多,80%都是crud的.由此想到一个方案,封装一个可以配置表单和列表自动生成前端通用代码.有个朋友听到这种需求 ...

  8. 微盟电子商城网络交易系统——Day01【项目介绍、项目环境搭建、快速搭建后台管理系统】

    ❤ 作者主页:欢迎来到我的技术博客

  9. Vue3快速搭建后台管理系统

    文章目录 前言 一.使用 vue3 1.创建项目 2.代码格式化 3.commit规范 4.强制 commit 5.强制代码规范 6.按需引入 elementplus 7.vue3.2新特性 8.初始 ...

最新文章

  1. 谷歌为什登不上去github_我们分析了GitHub上5.46 亿条日志,发现中国开源虽然贡献大但还有这些不足......
  2. 【CyberSecurityLearning 17】三层交换技术及实验演示、内部网络规划、HSRP
  3. Hash Length Extension Attacks
  4. pipline中替换tag变量
  5. jQuery 基础教程 (二)之jQuery对象与DOM对象
  6. 公式推导 11-20
  7. YOLO-V3可视化
  8. 数据中心用蒸发冷却(凝)空调机组的设计及试验分析
  9. [渝粤教育] 岭南师范学院 文学创意写作 参考 资料
  10. 你大学生活最美好的时刻是?
  11. Java中的异常分类[乐乐独记]
  12. Android中的颜色设置和常见RGB颜色表
  13. CTF中的无线电以及一些取证题目
  14. 非模态对话框和模态对话框_创建
  15. 解决M1芯片mac安装AU( Audition2020)AU2020已适配M1芯片,M1处理器安装AU教程方案
  16. 通用数据保护条例GDPR今日起正式生效,不会影响机器学习
  17. 闻道有先后,术业有专攻
  18. Codeforces 786A Berzerk(博弈)
  19. 中国古代十大名曲背后的掌故(转载)
  20. 聊一聊 C++ 中的 namespace

热门文章

  1. php活动倒计时代码,JavaScript实现活动倒计时效果的代码分享
  2. MAC突然连不上蓝牙
  3. JETT(一)-Excel模板转换器简介
  4. 第一次在OJ上写个a+b简直弱爆了。。。。
  5. 知行合一ArduPilot | ArduPilot系统框架简述
  6. 安卓平板隐藏虚拟按键_如何隐藏 Android 下方的三个虚拟按键
  7. linux列表去重复数据,Linux常用去除重复数据口令
  8. SONET、SDH、POS简介
  9. 什么软件有html5游戏,多款好玩HTML5小游戏带你认识HTML5优势
  10. HTTP基础知识(仅介绍涉及R语言爬虫部分)