bmob 快速搭建后台

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 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类型说明
NumberInteger、Float、Short、Byte、Double、Character对应数据库的Number类型
ArrayList数组类型
FileBmobFileBmob特有类型,用来标识文件类型
GeoPointBmobGeoPointBmob特有类型,用来标识地理位置
DateBmobDateBmob特有类型,用来标识日期类型
Pointer特定对象Bmob特有类型,用来标识指针类型
RelationBmobRelationBmob特有类型,用来标识数据关联

来源: 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"); // 分数递增1gameScore.update(this, updateListener);//您还可以通过increment(key, amount)方法来递增或递减任意幅度的数字 gameScore.increment("score", 5); // 分数递增5//gameScore.increment("score", -5); // 分数递减5gameScore.update(this, updateListener);


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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

春哥111

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值