Bmob 开发Android程序快速入门--小demo

原文链接: http://www.cnblogs.com/zhoujn/p/4341426.html

注册Bmob帐号

在网址栏输入www.bmob.cn或者在百度输入Bmob进行搜索,打开Bmob官网后,点击右上角的“注册”,在跳转页面填入你的姓名、邮箱、设置密码,确认后到你的邮箱激活Bmob账户,你就可以用Bmob轻松开发应用了。

网站后台创建应用

登录账号进入bmob后台后,点击后台界面左上角“创建应用”,在弹出框输入你应用的名称,然后确认,你就拥有了一个等待开发的应用。

Bmob 开发Android程序快速入门--小demo_第1张图片

获取应用密钥和下载SDK

选择你要开发的应用,点击该应用下方对应的“应用密钥”

在跳转页面,获取Application ID,此ID将会在初始化SDK中使用到。

Bmob 开发Android程序快速入门--小demo_第2张图片

获取Application ID后,下载SDK,开发者可以根据自己的需求选择相应的iOS SDK 或Android SDK,点击下载即可。

Bmob 开发Android程序快速入门--小demo_第3张图片

安装BmobSDK

一、在你的项目根目录下创建"libs"目录,将下载的BmobSDK文件放入该目录下。

二、在你的应用程序中添加相应的权限:

 android:name="android.permission.INTERNET"/>  android:name="android.permission.ACCESS_WIFI_STATE"/>  android:name="android.permission.ACCESS_NETWORK_STATE"/>  android:name="android.permission.READ_PHONE_STATE"/>  android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>  android:name="android.permission.READ_LOGS"/>
xml version="1.0" encoding="utf-8"?>  xmlns:android="http://schemas.android.com/apk/res/android" package="cn.bmob.example" android:versionCode="1" android:versionName="1.0">  android:minSdkVersion="8" android:targetSdkVersion="17"/>  android:name="android.permission.INTERNET"/>  android:name="android.permission.ACCESS_NETWORK_STATE"/>  android:name="android.permission.ACCESS_WIFI_STATE"/>  android:name="android.permission.READ_PHONE_STATE"/>  android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>  android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>  android:name="android.permission.READ_LOGS"/>  android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme">  android:name="cn.bmob.example.MainActivity" android:screenOrientation="portrait" android:label="@string/app_name">  android:name="android.intent.action.MAIN"/>  android:name="android.intent.category.LAUNCHER"/>  android:name=".CreateActivity" android:screenOrientation="portrait">  android:name=".DeleteActivity" android:screenOrientation="portrait">  android:name=".UpdateActivity" android:screenOrientation="portrait">  android:name=".FindActivity" android:screenOrientation="portrait">  

初始化BmobSDK

在你应用程序启动的Activity的onCreate()方法中初始化Bmob功能。代码如下所示:

package com.bmob.example; import cn.bmob.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 SDK // 使用时请将第二个参数Application ID替换成你在Bmob服务器端创建的Application ID Bmob.initialize(this, "Your Application ID"); } }



简介

Bmob平台为您的移动应用提供了一个完整的后端解决方案,我们提供轻量级的SDK开发包,让开发者以最小的配置和最简单的方式使用Bmob平台提供的服务,进而完全消除开发者编写服务器代码以及维护服务器的操作。

开源案例

Bmob致力于为开发者提供快速开发服务,为方便大家更好的理解Bmob SDK能够做的事情,我们特意为大家提供了一些源码,大家可以下载之后,嵌入Bmob的AppKey,再打包运行。

阅读源码是一种良好的习惯!!

即时聊天案例源码:https://github.com/bmob/BmobIMSDK4Android

图文社区案例源码:https://github.com/bmob/Wonderful2 这个案例是猿圈媛圈开发团队提供的。

校园小菜案例源码:https://github.com/bmob/Shop 这个案例是湖工大的朋友提供的。

社交分享案例源码:https://github.com/bmob/bmob-android-social-share 这个是金刚锁开发者提供的

第三方登录案例源码:https://github.com/bmob/bmob-android-demo-thirdpartylogin 包含第三方登录和登录后获取用户信息的源码

应用程序

在Bmob平台注册后,每个账户可创建多个应用程序,创建的每个应用程序都有其独自的应用程序ID,此后所有的应用程序将凭其ID进行Bmob SDK的使用。即使只有一个应用程序,也可以以不同的版本进行测试和生产。

应用安全

请大家在使用Bmob开发应用程序之前,认真阅读我们给大家提供的“数据与安全”的文档,确保你的应用在发布时安全。文档的链接地址是:http://docs.bmob.cn/datasafety/index.html?menukey=otherdoc&key=datasafety

数据类型

目前为止,我们支持的数据类型有String、Integer、Boolean、ArrayList以及BmobObject对象类型。同时Bmob也支持BmobDate、BmobGeoPoint、 BmobFile数据类型。

对象

一个对象对应了数据表中的一条数据,也可以理解为应用程序中的JavaBean.

数据对象

Bmob存储的数据是建立在BmobObject基础上的,所以任何要保存的数据对象必须继承自BmobObject类。BmobObject对象包含objectId、createdAt、updatedAt、ACL四个默认的属性,objectId为对象的唯一标示,可以理解为数据表中的主键,createdAt为对象的创建时间,updatedAt为对象的最后修改时间,ACL为这条数据的操作权限控制。例如,游戏中可能会用到的分数对象GameScore,它可能包含score、playerName、cheatMode等属性,那么这个数据对象创建的示例代码如下:

public class GameScore extends BmobObject{ private String playerName; private Integer score; private Boolean cheatMode; private BmobFile pic; public String getPlayerName() { return playerName; } public void setPlayerName(String playerName) { this.playerName = playerName; } public Integer getScore() { return score; } public void setScore(Integer score) { this.score = score; } public Boolean getCheatMode() { return cheatMode; } public void setCheatMode(Boolean cheatMode) { this.cheatMode = cheatMode; } public BmobFile getPic() { return pic; } public void setPic(BmobFile pic) { this.pic = pic; } }

类名和表名的关系

  • 默认情况下,Bmob提供了类名和表名完全一致的简单方式,实现类名和表名的映射。如,上面的GameScore类对应Web后台的表名是GameScore(区分大小写),如果创建一个数据对象名称为T_a_b,那么这个类名对应的Web后台的表名也是T_a_b。
  • 但很多时候,你希望在后台创建的表名和类名并不相同,如表名为T_a_b,而类名还是GameScore,那么你可以使用BmobObject提供的setTableName("表名")的方法,示例代码如下:
//这时候实际操作的表是T_a_b
public class GameScore extends BmobObject{ private String playerName; private Integer score; private Boolean cheatMode; private BmobFile pic; public GameScore() { this.setTableName("T_a_b"); } public String getPlayerName() { return playerName; } //其他方法,见上面的代码 }

当然了,你也可以在GameScore实例中动态调用setTableName方法,实现操作可变表(如根据日期建立表来存储信息)的可能。

查询自定义表名的数据

如果您使用了setTableName方法来自定义表名,那么在对该表进行数据查询的时候必须使用以下方法来进行查询。需要注意的是查询的结果是一个JSONArray,您需要自行解析JSONArray中的数据来进行使用。

/**
 * 查询数据
 */
public void queryData(){ BmobQuery query = new BmobQuery("T_a_b"); query.findObjects(this, new FindCallback() { @Override public void onSuccess(JSONArray arg0) { // TODO Auto-generated method stub showToast("查询成功:"+arg0.length()); } @Override public void onFailure(int arg0, String arg1) { // TODO Auto-generated method stub showToast("查询失败:"+arg1); } }); }

自定义表名情况下的更新、删除数据和普通的更新、删除数据方式一样,没有变化。尽管如此,我们还是提供了一个关于自定义表名情况下增删改查数据的Demo供开发者朋友参照源码来学习,下载地址是:https://github.com/bmob/bmob-android-demo-dynamic-tablename。

特殊对象

为了提供更好的服务,BmobSDK中提供了BmobUser、BmobInstallation两个特殊的BmobObject对象来完成不同的功能,在这里我们统一称为特殊对象。 BmobUser对象主要是针对应用中的用户功能而提供的,它对应着web端的User表,使用BmobUser对象可以很方便的在应用中实现用户的注册、登录、邮箱验证等功能,具体的使用方法可查看文档的用户部分。 BmobInstallation对象主要用于应用的安装设备管理中,它对应着web端的Installation表,任何安装了你应用的设备都会在此表中产生一条数据标示该设备。结合Bmob提供的推送功能,还可以实现将自定义的消息推送给不同的设备终端,具体的使用方法可查看文档的消息推送部分。

添加数据

添加数据非常简单,任何BmobObject对象都具有save方法可以用于将当前对象的内容保存到服务端。 例如,你现在要保存一条游戏分数的记录,可以这样做:

GameScore gameScore = new GameScore(); gameScore.setPlayerName("Barbie"); gameScore.setScore(89); gameScore.setCheatMode(false); gameScore.save(mContext, new SaveListener() { @Override public void onSuccess() { // TODO Auto-generated method stub toast("添加数据成功,返回objectId为:"+gameScore.getObjectId()); } @Override public void onFailure(int code, String arg0) { // TODO Auto-generated method stub // 添加失败 } });

运行完以上代码后,数据即可保存到服务器端。为了确认数据是否真的已经保存成功,你可以在Bmob服务器端你应用程序的数据浏览项目中进行查看。你应该看到类似这样的结果:

objectId: "0c6db13c", score: 89, playerName: "Barbie", cheatMode: false,createdAt:"2013-09-27 10:32:54", updatedAt:"2013-09-27 10:32:54"

注:

  1. 在运行以上代码时,如果服务器端你创建的应用程序中已经存在GameScore数据表和相应的score、playerName、cheatMode字段,那么你此时添加的数据和数据类型也应该和服务器端的表结构一致,否则将保存数据失败。

  2. 如果服务器端不存在GameScore数据表,那么Bmob将根据你第一次(也就是运行的以上代码)保存的GameSocre对象在服务器为你创建此数据表并插入相应数据。

  3. 每个BmobObject对象都有几个默认的键(数据列)是不需要开发者指定的,objectId是每个保存成功数据的唯一标识符。createdAtupdatedAt代表每个对象(每条数据)在服务器上创建和最后修改的时间。这些键(数据列)的创建和数据内容是由服务器端自主来完成的。因此,使用save和insert方法时,不需要调用setObjectId方法,否则会出现提示:“It is a reserved field: objectId(105)”--表明objectId为系统保留字段,不允许修改。

查询数据

数据的查询可能是每个应用都会频繁使用到的,BmobSDK中提供了BmobQuery类,它提供了多样的方法来实现不同条件的查询,同时它的使用也是非常的简单和方便的。

查询所有数据

查询某个数据表中的所有数据是非常简单的查询操作,例如:查询所有人员的信息。

BmobQuery<GameScore> query = new BmobQuery<GameScore>(); query.findObjects(this, new FindListener<GameScore>() { @Override public void onSuccess(List<GameScore> object) { // TODO Auto-generated method stub toast("查询成功:共"+object.size()+"条数据。"); } @Override public void onError(int code, String msg) { // TODO Auto-generated method stub toast("查询失败:"+msg); } });

怎么样,是不是很简单,而且查询的结果不需要进行任何处理,BmobSDK已经为你封装成相应的JavaBean集合了,你直接使用即可。

这里需要注意一点的是: 默认情况下,系统实际上并不会返回所有的数据,而是默认返回10条数据记录,你可以通过setLimit方法设置返回的记录数量。更多细节可点击查看分页查询一节。

查询单条数据

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

BmobQuery<GameScore> query = new BmobQuery<GameScore>(); query.getObject(this, "a203eba875", new GetListener<GameScore>() { @Override public void onSuccess(GameScore object) { // TODO Auto-generated method stub toast("查询成功:"); } @Override public void onFailure(int code, String arg0) { // TODO Auto-generated method stub toast("查询失败:"+arg0); } });

条件查询

在查询的使用过程中,基于不同条件的查询是非常常见的,BmobQuery同样也支持不同条件的查询。

例如:如果要过滤掉特定键的值可以使用addWhereNotEqualTo方法。比如需要查询playerName不等于“Barbie”的数据时可以这样写:

query.addWhereNotEqualTo("playerName", "Barbie");

当然,你可以在你的查询操作中添加多个约束条件,来查询符合要求的数据。

query.addWhereNotEqualTo("playerName", "Barbie"); //名字不等于Barbie query.addWhereGreaterThan("score", 60); //条件:分数大于60岁

各种不同条件的比较查询:

// 分数 < 50
query.addWhereLessThan("score", 50); //分数 <= 50 query.addWhereLessThanOrEqualTo("score", 50); //分数 > 50 query.addWhereGreaterThan("score", 50); //分数 >= 50 query.addWhereGreaterThanOrEqualTo("score", 50);

如果你想查询匹配几个不同值的数据,如:要查询“Barbie”,“Joe”,“Julia”三个人的成绩时,你可以使用addWhereContainedIn方法来实现。

String[] names = {"Barbie", "Joe", "Julia"}; query.addWhereContainedIn("playerName", Arrays.asList(names));

相反,如果你想查询排除“Barbie”,“Joe”,“Julia”这三个人的其他同学的信息,你可以使用addWhereNotContainedIn方法来实现。

String[] names = {"Barbie", "Joe", "Julia"}; query.addWhereNotContainedIn("playerName", Arrays.asList(names));

时间查询比较特殊,我们需要结合BmobDate这个类来查询某个指定日期时间前后的数据,这里也给出示例供大家参考:

比如,你想查询2015年2月11号之前的Person数据,那么可以使用addWhereLessThan或者addWhereLessThanOrEqualTo(包含当天)来查询。如果想查询之后的数据,则可以使用addWhereGreaterThan或addWhereGreaterThanOrEqualTo(包含当天)来查询。

BmobQuery<Person> query = new BmobQuery<Person>("Person"); String dateString = "2015-02-11"; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Date date = null; try { date = sdf.parse(dateString); } catch (ParseException e) { e.printStackTrace(); } //这是查询2015年2月11之前的Person数据 query.addWhereLessThan("createdAt",new BmobDate(date)); //这是查询2015年2月11之后的Person数据 //query.addWhereGreaterThan("createdAt",new BmobDate(date)); ```java ### 模糊查询 如果你想实现类似数据库的模糊查询,比如,你想查询用户表中用户名中含有“a”的用户,那么你可以使用`addWhereContains`方法来实现。 ```java String value = "a"; query.addWhereContains("username", value);

分页查询

有时,在数据比较多的情况下,你希望查询出的符合要求的所有数据能按照多少条为一页来显示,这时可以使用setLimit方法来限制查询结果的数据条数来进行分页。默认情况下,Limit的值为10,最大有效设置值1000(设置的数值超过1000还是视为1000)。

query.setLimit(10); // 限制最多10条数据结果作为一页

在数据较多的情况下,在setLimit的基础上分页显示数据是比较合理的解决办法,setSKip方法可以做到跳过查询的前多少条数据来实现分页查询的功能。默认情况下Skip的值为10。

query.setSkip(10); // 忽略前10条数据(即第一页数据结果)

大家也可以直接下载我们提供的Demo源码(https://github.com/bmob/bmob-android-demo-paging),查看如何使用分页查询,结合ListView开发下拉刷新查看更多内容的应用。

结果排序

对应数据的排序,如数字或字符串,你可以使用升序或降序的方式来控制查询数据的结果顺序:

// 根据score字段升序显示数据
query.order("score"); // 根据score字段降序显示数据 query.order("-score"); // 多个排序字段可以用(,)号分隔 query.order("-score,createdAt");

说明:多个字段排序时,先按第一个字段进行排序,再按第二个字段进行排序,依次进行。

统计对象数量

如果你只是想统计满足查询对象的数量,你并不需要获取所有匹配对象的具体数据信息,可以直接使用count替代findObjects。例如,查询一个特定玩家玩的游戏场数:

BmobQuery<GameSauce> query = new BmobQuery<GameSauce>(); query.addWhereEqualTo("playerName", "Barbie"); query.count(this, GameSauce.class, new CountListener() { @Override public void onSuccess(int count) { // TODO Auto-generated method stub toast("Barbie has played" + count + "games"); } @Override public void onFailure(int code, String msg) { // TODO Auto-generated method stub toast("count failure:"+msg); } });

复杂查询

复合与查询(and)

有些查询需要使用到复合“与”的查询条件,例如:你想查询出Person表中年龄在6-29岁之间且姓名以"y"或者"e"结尾的人,那么,可以采用and查询,示例代码如下:

//查询年龄6-29岁之间的人,每一个查询条件都需要New一个BmobQuery对象
//--and条件1
BmobQuery<Person> eq1 = new BmobQuery<Person>(); eq1.addWhereLessThanOrEqualTo("age", 29);//年龄<=29 //--and条件2 BmobQuery<Person> eq2 = new BmobQuery<Person>(); eq2.addWhereGreaterThanOrEqualTo("age", 6);//年龄>=6 //查询姓名以"y"或者"e"结尾的人--这个需要使用到复合或查询(or) //--and条件3 BmobQuery<Person> eq3 = new BmobQuery<Person>(); eq3.addWhereEndsWith("name", "y"); BmobQuery<Person> eq4 = new BmobQuery<Person>(); eq4.addWhereEndsWith("name", "e"); List<BmobQuery<Person>> queries = new ArrayList<BmobQuery<Person>>(); queries.add(eq3); queries.add(eq4); BmobQuery<Person> mainQuery = new BmobQuery<Person>(); BmobQuery<Person> or = mainQuery.or(queries); //最后组装完整的and条件 List<BmobQuery<Person>> andQuerys = new ArrayList<BmobQuery<Person>>(); andQuerys.add(eq1); andQuerys.add(eq1); andQuerys.add(or); //查询符合整个and条件的人 BmobQuery<Person> query = new BmobQuery<Person>(); query.and(andQuerys); query.findObjects(this, new FindListener<Person>() { @Override public void onSuccess(List

转载于:https://www.cnblogs.com/zhoujn/p/4341426.html

你可能感兴趣的:(Bmob 开发Android程序快速入门--小demo)