bmob-database-android

👤 user_92a793e0 📦 v1.0.1 ⭐ 4.5 ⬇️ 298 下載
💻 開發程式設計 免費 🔑 需 API Key

📖 技能介紹


name: bmob-database-android description: "Use when implementing Bmob NoSQL database CRUD in an Android Native project (Java or Kotlin). Triggers: io.github.bmob:android-sdk, Bmob.initialize(this, ...), BmobObject, BmobQuery, BmobUser, BmobInstallation, BmobFile, BmobRelation, BmobGeoPoint, BmobDate, SaveListener, UpdateListener, FindListener, QueryListener, BmobException, BmobContentProvider, AndroidManifest Bmob 配置. NOT for cross-platform JavaScript / WeChat Mini Program / Cocos Creator JS (use bmob-database-javascript), iOS / Swift (use bmob-database-ios), Flutter / Dart (use bmob-database-flutter), or raw HTTP from any other language (use bmob-database-restful). If Bmob MCP is configured, call get_project_tables via bmob-mcp before writing code." metadata: author: bmob version: "0.1.0" sdk: "io.github.bmob:android-sdk" docs: "https://github.com/bmob/BmobDocs/blob/master/mds/data/android/develop_doc.md" docs_raw: "https://raw.githubusercontent.com/bmob/BmobDocs/master/mds/data/android/develop_doc.md" docs_quickstart: "https://github.com/bmob/BmobDocs/blob/master/mds/data/android/index.md" quickstart_repo: "https://github.com/bmob/bmob-android-quickstart"


Bmob Database — Android Native SDK

Bmob 為 Android 原生提供 Java/Kotlin SDK,釋出在 Maven 倉庫 io.github.bmob:android-sdk。模型層用 繼承 BmobObject 的方式(一個 JavaBean 子類 = 一張表),CRUD 通過 SDK 提供的 Listener 回撥返回。

核心原則

1. SDK 引入: app/build.gradle 新增:

dependencies {
    implementation 'io.github.bmob:android-sdk:4.2.1'
    implementation 'io.reactivex.rxjava3:rxjava:3.1.9'
    implementation 'io.reactivex.rxjava3:rxandroid:3.0.2'
    implementation 'com.squareup.okhttp3:okhttp:4.8.1'
    implementation 'com.squareup.okio:okio:2.2.2'
    implementation 'com.google.code.gson:gson:2.8.5'
}

2. Application 子類初始化: 一次性、必須在任何 Bmob 呼叫之前。

public class BmobApp extends Application {
    @Override public void onCreate() {
        super.onCreate();
        Bmob.initialize(this, "你的Application ID");
    }
}

AndroidManifest.xml 裡指定 android:name=".BmobApp"

3. 必備許可權與 ContentProvider: 詳見 references/manifest-and-deps.md(INTERNET / ACCESS_NETWORK_STATE / READ_PHONE_STATE / <provider> 等)。

4. JavaBean 繼承 BmobObject 表名 = 類名,欄位名 = 成員變數名。不要手動寫 objectId / createdAt / updatedAt / ACL,BmobObject 已經提供 getter。

5. Number 欄位必須用封裝類Integer / Long / Double 等),不要用原生 int / long / double,否則儲存時無法區分預設值。

6. Android 6.0+ 網路相容:見 references/manifest-and-deps.mduseLibrary 'org.apache.http.legacy'network_security_config.xml

安全清單

  • [ ] 不要在 APK 中洩漏 Master Key。客戶端只用 Application ID(必要時配 Secret Key + 加密授權)。
  • [ ] release 包關閉除錯模式Bmob.setIsDebug(true) 僅 debug 構建開啟。
  • [ ] 混淆配置必須保留 SDK 類:見 references/manifest-and-deps.md 的 ProGuard 段。
  • [ ] 寫操作的表必須配 ACL:否則任意使用者可改任意行。
  • [ ] release 上線前替換為備案域名Bmob.resetDomain("http://你的SDK域名/8/") 必須在 Bmob.initialize 之前
  • [ ] Number 型別用包裝類:避免 0 與"未設定"無法區分。

常見問題

跨平臺 Q&A:shared/faq.md

反模式

shared/anti-patterns.md。本端重點:success 回撥內未捕獲異常 → 假 9015;勿用原生 int 存 Number。

自定義 JavaBean

public class Category extends BmobObject {
    private String name;
    private String desc;
    private Integer sequence;        // 必須是 Integer,不是 int

    public String getName() { return name; }
    public Category setName(String name) { this.name = name; return this; }
    public String getDesc() { return desc; }
    public Category setDesc(String desc) { this.desc = desc; return this; }
    public Integer getSequence() { return sequence; }
    public Category setSequence(Integer sequence) { this.sequence = sequence; return this; }
}
控制台型別 Java 型別
String String
Boolean Boolean
Number Integer / Long / Double / Float / Short / Byte / Character
Array List
File BmobFile
GeoPoint BmobGeoPoint
Date BmobDate
Pointer 任何繼承 BmobObject 的子類
Relation BmobRelation

單條 CRUD

新增

Category c = new Category();
c.setName("football");
c.setDesc("足球");
c.setSequence(1);
c.save(new SaveListener<String>() {
    @Override public void done(String objectId, BmobException e) {
        if (e == null) Log.i("BMOB", "new id=" + objectId);
        else Log.e("BMOB", e.toString());
    }
});

更新(根據 objectId)

Category c = new Category();
c.setSequence(2);                         // 只設要改的欄位
c.update("6b6c11c537", new UpdateListener() {
    @Override public void done(BmobException e) {
        if (e == null) Log.i("BMOB", "updated");
    }
});

刪除(根據 objectId)

Category c = new Category();
c.delete("6b6c11c537", new UpdateListener() {
    @Override public void done(BmobException e) {
        if (e == null) Log.i("BMOB", "deleted");
    }
});

查詢一條(根據 objectId)

BmobQuery<Category> q = new BmobQuery<>();
q.getObject("6b6c11c537", new QueryListener<Category>() {
    @Override public void done(Category obj, BmobException e) {
        if (e == null) Log.i("BMOB", obj.getName());
    }
});

7w4.net提供免費和付費技能下載。

條件查詢

BmobQuery 提供鏈式呼叫(v3.5.2+):

BmobQuery<Book> q = new BmobQuery<>();
q.setLimit(20).setSkip(0).order("-createdAt")
 .addWhereEqualTo("status", "published")
 .findObjects(new FindListener<Book>() {
     @Override public void done(List<Book> list, BmobException e) {
         if (e == null) /* ... */;
     }
 });
方法 含義
addWhereEqualTo(field, value) =
addWhereNotEqualTo !=
addWhereGreaterThan / addWhereGreaterThanOrEqualTo > / >=
addWhereLessThan / addWhereLessThanOrEqualTo < / <=
addWhereContainedIn(field, List) IN
addWhereNotContainedIn NOT IN
addWhereExists(field) / addWhereDoesNotExists 欄位存在 / 不存在
addWhereContains(field, substr) LIKE(付費)
order("-field") / order("field") 排序
setLimit(n) / setSkip(n) 分頁(預設 10,最大 1000)
include("pointerField") 一併拉取 Pointer

更多見 references/query.md

批次操作(≤ 50)

List<BmobObject> list = new ArrayList<>();
for (int i = 0; i < 50; i++) {
    Category c = new Category();
    c.setName("name" + i);
    list.add(c);
}
new BmobBatch().insertBatch(list).doBatch(new QueryListListener<BatchResult>() {
    @Override public void done(List<BatchResult> results, BmobException e) { /* ... */ }
});

詳見 references/batch.md

與 MCP 聯動

如已配置 Bmob MCPget_project_tables 拿真實 schema,再生成對應的 BmobObject 子類骨架。這能避免:

  • JavaBean 欄位名 / 型別與表不匹配(錯欄位不報錯,寫入後查不到)
  • Pointer 指向的 className 拼錯

排錯速查

跨平臺現象先查 shared/faq.md

現象 排查
9001 AppKey is Null 沒調 Bmob.initialize 或呼叫時機晚於其他 SDK API
9013 ObjectName format incorrect 表名 / 欄位名含非法字元(必須字母開頭)
9015 兜底錯誤碼——必讀響應描述,可能是 success 回撥裡業務異常被吞掉,見 bmob-error-codes 的 9015 專題
9016 客戶端沒網
9021 WAKE_LOCK 許可權
ProGuard release 後崩潰 沒加 -keep class cn.bmob.v3.** { *; } 等規則,詳見 references
HTTP 明文請求被 Android P 拒絕 network_security_config.xml,見 references
release 包請求被拒 / 403 控制台沒配 SDK 型別的備案域名;Bmob.resetDomain 沒調或呼叫時機錯(必須在 initialize 前)

進階能力(按需讀 references/)

主題 路徑
端到端場景(部落格、Todo ACL、遷移等) shared/recipes/
BmobDocs 同步程式碼片段 references/snippets/
Manifest + 依賴 + ProGuard + Android P/6.0 相容 references/manifest-and-deps.md
批次操作(insert/update/delete 各 50/批) references/batch.md
查詢全集(or / regex / pointer 子查詢) references/query.md
Pointer 與 Relation 用法 references/pointer-and-relation.md
使用者系統、郵箱、手機號 SMS、第三方登入 (P1: bmob-auth-android,本 skill 不細寫)
檔案上傳 / 下載(BmobFile) (P1: bmob-storage-android
資料監聽(即時資料) (P1: bmob-realtime-android
地理位置(BmobGeoPoint) references/query.md 末段

參考

🤖 AI 評測

這是一份較為實用的Bmob Android開發參考指南,內容覆蓋面廣,程式碼示例豐富,安全性提示也比較到位。文件結構清晰,從入門到高階查詢都有涉及,對Android開發環境的配置說明也比較詳細。美中不足的是示例僅提供Java程式碼,且部分內容組織稍顯零散。對於想快速上手Bmob資料庫開發的Android程式設計師來說,這個Skill能提供有效的幫助,但需要一定的Android和Java基礎。

📊 多維度評分

適應性4.4
規範性4.5
有效性4.5
可靠性4.5
可信度4.8

📁 包含檔案 (158 個)

📄 SKILL.md 10.2 KB
📄 references/batch.md 3.2 KB
📄 references/manifest-and-deps.md 4.5 KB
📄 references/pointer-and-relation.md 2.6 KB
📄 references/query.md 4.6 KB
📄 references/snippets/develop-doc--1-2-自定義資料型別-01.txt 795 B
📄 references/snippets/develop-doc--1-5-1-新增一條資料-01.java 666 B
📄 references/snippets/develop-doc--1-5-2-更新資料-01.java 543 B
📄 references/snippets/develop-doc--1-5-3-刪除資料-01.java 515 B
📄 references/snippets/develop-doc--1-5-4-查詢一條資料-01.txt 582 B
📄 references/snippets/develop-doc--1-6-1-批次新增-01.java 1.4 KB
📄 references/snippets/develop-doc--1-6-2-批次更新-01.java 1.9 KB
📄 references/snippets/develop-doc--1-6-3-批次刪除-01.java 1.6 KB
📄 references/snippets/develop-doc--1-6-4-批次新增-批次更新-批次刪除同時操作-01.java 3.3 KB
📄 references/snippets/develop-doc--1-6-5-查詢多條資料-01.txt 579 B
📄 references/snippets/develop-doc--1-6-6-同步查詢資料-01.java 555 B
📄 references/snippets/develop-doc--11-地理位置-01.java 114 B
📄 references/snippets/develop-doc--14-混淆打包-01.xml 281 B
📄 references/snippets/develop-doc--15-域名備案和重置-01.java 165 B
📄 references/snippets/develop-doc--18-除錯模式-01.java 44 B
📄 references/snippets/develop-doc--2-1-2-自定義使用者型別-01.java 2.5 KB
📄 references/snippets/develop-doc--2-2-1-賬號密碼註冊-01.java 640 B
📄 references/snippets/develop-doc--2-2-2-賬號密碼登入-01.java 716 B
📄 references/snippets/develop-doc--2-2-2-賬號密碼登入-02.java 564 B
📄 references/snippets/develop-doc--2-2-3-判斷當前是否有使用者登入-01.java 253 B
📄 references/snippets/develop-doc--2-2-4-獲取當前使用者以及使用者屬性-01.java 520 B
📄 references/snippets/develop-doc--2-2-5-同步本地快取的使用者資訊-01.java 1.4 KB
📄 references/snippets/develop-doc--2-2-5-同步本地快取的使用者資訊-02.java 656 B
📄 references/snippets/develop-doc--2-2-6-更新使用者資訊-01.java 649 B
📄 references/snippets/develop-doc--2-2-7-查詢使用者-01.java 522 B
📄 references/snippets/develop-doc--2-2-8-提供舊密碼修改密碼-01.java 550 B
📄 references/snippets/develop-doc--2-2-9-退出登入-01.java 18 B
📄 references/snippets/develop-doc--2-3-1-郵箱密碼登入-01.java 641 B
📄 references/snippets/develop-doc--2-3-3-傳送郵箱驗證郵件-01.java 623 B
📄 references/snippets/develop-doc--2-3-4-郵箱重置密碼-01.java 634 B
📄 references/snippets/develop-doc--2-4-1-手機號碼和密碼登入-01.java 626 B
📄 references/snippets/develop-doc--2-4-2-手機號碼和簡訊驗證碼登入-01.java 752 B
📄 references/snippets/develop-doc--2-4-2-手機號碼和簡訊驗證碼登入-02.java 587 B
📄 references/snippets/develop-doc--2-4-3-手機號碼一鍵註冊或登入-01.java 752 B
📄 references/snippets/develop-doc--2-4-3-手機號碼一鍵註冊或登入-02.java 510 B
📄 references/snippets/develop-doc--2-4-3-手機號碼一鍵註冊或登入-03.java 994 B
📄 references/snippets/develop-doc--2-4-4-繫結-解綁手機號碼-01.txt 632 B
📄 references/snippets/develop-doc--2-4-4-繫結-解綁手機號碼-02.txt 1.1 KB
📄 references/snippets/develop-doc--2-4-5-手機號碼重置密碼-01.java 624 B
📄 references/snippets/develop-doc--2-4-5-手機號碼重置密碼-02.java 322 B
📄 references/snippets/develop-doc--2-5-2-第三方平臺一鍵註冊或登入-01.java 850 B
📄 references/snippets/develop-doc--2-5-3-關聯第三方平臺-01.java 788 B
📄 references/snippets/develop-doc--2-5-4-解除第三方平臺關聯-01.java 770 B
📄 references/snippets/develop-doc--4-資料查詢-01.java 472 B
📄 references/snippets/develop-doc--5-陣列操作-01.java 517 B
📄 references/snippets/develop-doc--7-檔案管理-01.xml 160 B
📄 references/snippets/develop-doc--android-6-0-01.txt 48 B
📄 references/snippets/develop-doc--android-p-網路配置-01.txt 144 B
📄 references/snippets/develop-doc--android-p-網路配置-02.txt 105 B
📄 references/snippets/develop-doc--bql快取查詢-01.java 882 B
📄 references/snippets/develop-doc--include用法-01.java 24 B
📄 references/snippets/develop-doc--include用法-02.java 27 B
📄 references/snippets/develop-doc--include用法-03.java 45 B
📄 references/snippets/develop-doc--include用法-04.java 29 B
📄 references/snippets/develop-doc--include用法-05.java 52 B
📄 references/snippets/develop-doc--上傳單一檔案-01.java 493 B
📄 references/snippets/develop-doc--下載檔案-01.java 371 B
📄 references/snippets/develop-doc--下載檔案-02.java 321 B
📄 references/snippets/develop-doc--下載檔案-03.java 133 B
📄 references/snippets/develop-doc--下載檔案-04.java 755 B
📄 references/snippets/develop-doc--與查詢-and-01.java 1.4 KB
📄 references/snippets/develop-doc--使用add-addall新增-01.java 749 B
📄 references/snippets/develop-doc--使用addunique-addallunique新增-01.java 760 B
📄 references/snippets/develop-doc--修改多對多關聯-01.java 603 B
📄 references/snippets/develop-doc--關聯表條件查詢-01.java 621 B
📄 references/snippets/develop-doc--關聯表條件查詢-02.java 625 B
📄 references/snippets/develop-doc--關聯表條件查詢-03.sql 524 B
📄 references/snippets/develop-doc--分頁查詢-01.java 64 B
📄 references/snippets/develop-doc--分頁查詢-02.java 72 B
📄 references/snippets/develop-doc--列值是否存在-01.java 65 B
📄 references/snippets/develop-doc--列值是否存在-02.java 81 B
📄 references/snippets/develop-doc--建立地理位置物件-01.java 856 B
📄 references/snippets/develop-doc--建立資料物件-01.java 1.2 KB
📄 references/snippets/develop-doc--建立資料物件-02.java 743 B
📄 references/snippets/develop-doc--建立檔案物件-01.java 88 B
📄 references/snippets/develop-doc--刪除一對一關聯-01.java 688 B
📄 references/snippets/develop-doc--刪除多對多關聯-01.java 411 B
📄 references/snippets/develop-doc--刪除欄位的值-01.java 360 B
📄 references/snippets/develop-doc--刪除陣列資料-01.java 277 B
📄 references/snippets/develop-doc--刪除檔案-01.java 348 B
📄 references/snippets/develop-doc--佔位符查詢-01.java 603 B
📄 references/snippets/develop-doc--佔位符查詢-02.java 650 B
📄 references/snippets/develop-doc--佔位符查詢-03.java 366 B
📄 references/snippets/develop-doc--佔位符查詢-04.java 263 B
📄 references/snippets/develop-doc--原子計數器-01.java 80 B
📄 references/snippets/develop-doc--原子計數器-02.java 136 B
📄 references/snippets/develop-doc--基本bql查詢-01.java 536 B
📄 references/snippets/develop-doc--基本bql查詢-02.java 626 B
📄 references/snippets/develop-doc--基本bql查詢-03.sql 42 B
📄 references/snippets/develop-doc--子查詢-01.java 107 B
📄 references/snippets/develop-doc--子查詢-02.java 110 B
📄 references/snippets/develop-doc--開始連線-01.java 1.6 KB
📄 references/snippets/develop-doc--或查詢-or-01.java 663 B
📄 references/snippets/develop-doc--批次上傳檔案-01.java 1.2 KB
📄 references/snippets/develop-doc--批次刪除檔案-01.java 490 B
📄 references/snippets/develop-doc--指定使用者的訪問許可權-01.java 1.1 KB
📄 references/snippets/develop-doc--指定使用者的訪問許可權-02.java 507 B
📄 references/snippets/develop-doc--排序-01.java 204 B
📄 references/snippets/develop-doc--陣列查詢-01.java 685 B
📄 references/snippets/develop-doc--時間查詢-01.java 903 B
📄 references/snippets/develop-doc--時間查詢-02.java 912 B
📄 references/snippets/develop-doc--時間查詢-03.java 906 B
📄 references/snippets/develop-doc--時間查詢-04.java 926 B
📄 references/snippets/develop-doc--時間查詢-05.java 910 B
📄 references/snippets/develop-doc--時間查詢-06.java 930 B
📄 references/snippets/develop-doc--時間查詢-07.java 1.5 KB
📄 references/snippets/develop-doc--更新一對一關聯-01.java 777 B
📄 references/snippets/develop-doc--更新陣列資料-01.java 942 B
📄 references/snippets/develop-doc--查詢一對一關聯-01.java 946 B
📄 references/snippets/develop-doc--查詢一對多關聯-01.java 571 B
📄 references/snippets/develop-doc--查詢地理位置資訊-01.java 431 B
📄 references/snippets/develop-doc--查詢地理位置資訊-02.java 727 B
📄 references/snippets/develop-doc--查詢地理位置資訊-03.java 731 B
📄 references/snippets/develop-doc--查詢地理位置資訊-04.java 733 B
📄 references/snippets/develop-doc--查詢地理位置資訊-05.java 741 B
📄 references/snippets/develop-doc--查詢地理位置資訊-06.java 899 B
📄 references/snippets/develop-doc--查詢多對多關聯-01.java 557 B
📄 references/snippets/develop-doc--查詢指定列-01.java 493 B
📄 references/snippets/develop-doc--查詢陣列資料-01.java 416 B
📄 references/snippets/develop-doc--查詢結果計數-01.java 361 B
📄 references/snippets/develop-doc--查詢自定義表名的資料-01.java 536 B
📄 references/snippets/develop-doc--查詢自定義表名的資料-02.java 492 B
📄 references/snippets/develop-doc--查詢自定義表名的資料-03.java 608 B
📄 references/snippets/develop-doc--模糊查詢-01.java 48 B
📄 references/snippets/develop-doc--模糊查詢-02.java 300 B
📄 references/snippets/develop-doc--比較查詢-01.txt 652 B
📄 references/snippets/develop-doc--比較查詢-02.txt 661 B
📄 references/snippets/develop-doc--比較查詢-03.txt 649 B
📄 references/snippets/develop-doc--比較查詢-04.txt 669 B
📄 references/snippets/develop-doc--比較查詢-05.txt 653 B
📄 references/snippets/develop-doc--比較查詢-06.txt 673 B
📄 references/snippets/develop-doc--新增一對一關聯-01.java 918 B
📄 references/snippets/develop-doc--新增一對多關聯-01.java 448 B
📄 references/snippets/develop-doc--新增多對多關聯-01.java 592 B
📄 references/snippets/develop-doc--類名和表名的關係-01.java 335 B
📄 references/snippets/develop-doc--統計bql查詢-01.java 591 B
📄 references/snippets/develop-doc--統計查詢-01.java 4.8 KB
📄 references/snippets/develop-doc--快取方法-01.java 58 B
📄 references/snippets/develop-doc--快取方法-02.java 40 B
📄 references/snippets/develop-doc--快取方法-03.java 48 B
📄 references/snippets/develop-doc--快取方法-04.java 71 B
📄 references/snippets/develop-doc--快取方法-05.java 909 B
📄 references/snippets/develop-doc--快取查詢-01.java 373 B
📄 references/snippets/develop-doc--獲取所有表的結構-01.java 393 B
📄 references/snippets/develop-doc--獲取伺服器時間-01.java 395 B
📄 references/snippets/develop-doc--角色之間的從屬關係-01.java 882 B
📄 references/snippets/develop-doc--角色之間的從屬關係-02.java 803 B
📄 references/snippets/develop-doc--角色之間的從屬關係-03.java 765 B
📄 references/snippets/develop-doc--角色之間的從屬關係-04.java 777 B
📄 references/snippets/develop-doc--角色管理-01.java 1.1 KB
📄 references/snippets/develop-doc--設定檔案分片上傳時每片大小-01.java 415 B
📄 references/snippets/develop-doc--返回資料說明-01.java 303 B
📄 references/snippets/develop-doc--預設訪問許可權-01.java 1.1 KB