bmob 快速搭建后台

提前说明,本文档主要是根据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) Project build.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)在 app build.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 stub
        toast("查询成功:");//获得playerName的信息
        object.getPlayerName();//获得数据的objectId信息
        object.getObjectId();//获得createdAt数据创建时间(注意是:createdAt,不是createAt)
        object.getCreatedAt();}@Overridepublic void onFailure(int code, String arg0) {// TODO Auto-generated method stub
        toast("查询失败:"+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 stub
            toast("查询成功:共"+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 stub
            toast("查询失败:"+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特有类型,用来标识数据关联



类名和表名的关系
推荐使用完全一致的映射的使用方式 。就是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);

暂时就是这些,剩下的之后慢慢来。


  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值