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。

小葱技能有更好的技能skills插件。

自定义 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());
    }
});

条件查询

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