在網址欄輸入www.bmob.cn或者在百度輸入Bmob進行搜索,打開Bmob官網後,點擊右上角的「註冊」,在跳轉頁面填入你的姓名、郵箱、設置密碼,確認後到你的郵箱激活Bmob帳戶,你就能夠用Bmob輕鬆開發應用了。html
登陸帳號進入bmob後臺後,點擊後臺界面左上角「建立應用」,在彈出框輸入你應用的名稱,而後確認,你就擁有了一個等待開發的應用。前端
選擇你要開發的應用,點擊該應用下方對應的「應用密鑰」java
在跳轉頁面,獲取Application ID,此ID將會在初始化SDK中使用到。android
獲取Application ID後,下載SDK,開發者能夠根據本身的需求選擇相應的iOS SDK 或Android SDK,點擊下載便可。ios
1、在你的項目根目錄下建立"libs"目錄,將下載的BmobSDK文件放入該目錄下。git
2、在你的應用程序中添加相應的權限:github
<uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.READ_PHONE_STATE"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.READ_LOGS"/>
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="cn.bmob.example" android:versionCode="1" android:versionName="1.0"> <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17"/> <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <uses-permission android:name="android.permission.READ_PHONE_STATE"/> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.READ_LOGS"/> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme"> <activity android:name="cn.bmob.example.MainActivity" android:screenOrientation="portrait" android:label="@string/app_name"> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> <activity android:name=".CreateActivity" android:screenOrientation="portrait"> <activity android:name=".DeleteActivity" android:screenOrientation="portrait"> <activity android:name=".UpdateActivity" android:screenOrientation="portrait"> <activity android:name=".FindActivity" android:screenOrientation="portrait"> </application> </manifest>
在你應用程序啓動的Activity的onCreate()方法中初始化Bmob功能。代碼以下所示:web
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; } }
//這時候實際操做的表是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"
注:
在運行以上代碼時,若是服務器端你建立的應用程序中已經存在GameScore數據表和相應的score、playerName、cheatMode字段,那麼你此時添加的數據和數據類型也應該和服務器端的表結構一致,不然將保存數據失敗。
若是服務器端不存在GameScore數據表,那麼Bmob將根據你第一次(也就是運行的以上代碼)保存的GameSocre對象在服務器爲你建立此數據表並插入相應數據。
每一個BmobObject對象都有幾個默認的鍵(數據列)是不須要開發者指定的,objectId
是每一個保存成功數據的惟一標識符。createdAt
和updatedAt
表明每一個對象(每條數據)在服務器上建立和最後修改的時間。這些鍵(數據列)的建立和數據內容是由服務器端自主來完成的。所以,使用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); } });
有些查詢須要使用到複合「與」的查詢條件,例如:你想查詢出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<Person> object)