Firebase初探:实时数据库(2)
前面的那篇介绍了Firebase实时数据库的相关知识,那么客户端将如何与实时数据库进行沟通呢?
小试牛刀
Firebase的SDK当然是必不可少的了,为了使用数据库相关的API,需要在应用的依赖项中添加:
compile 'com.google.firebase:firebase-database:9.4.0'
为了和数据库交互,需要得到数据库的一个实例,而且具体的交互对象是数据库中的某个节点,这时就需要获得这个节点的一个引用:
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference mRef = database.getReference("students");
通过这两句代码,我们得到了数据库的实例和节点的引用,数据的读写操作都是用DatabaseReference进行的
那么数据库基本的增删查改如何进行呢?我们先来看看最直观的写和读
写
写操作包括了增和删,但是SDK并没有对这两个操作进行明显的区分,而是将其视为写操作,SDK中有四种写操作:
方法 | 说明 |
---|---|
setValue() | 在指定的路径,将数据写入或替换 |
push() | 生成唯一ID,路径进入到此ID中 |
updateChildren() | 更新此路径中的部分键值,而不是所有数据 |
runTransaction() | 进行并发更新 |
setValue
setValue(Object)是最基本的写操作。得到某个节点的引用后,调用setValue()即可写入数据,如果该节点原本就有数据,则会覆盖该节点下的所有数据
由于数据库使用了JSON作为数据格式,setValue()可接受的参数类型有:
- Boolean
- Long
- Double
- Map< String, Object >
- List< Object >
除了基本的数字和布尔值外,还可以接受自定义的对象,自定义对象的要求有:
- 类必须要有默认构造器
- 类必须为成员变量提供getter方法。没有getter方法的成员变量对应的键值将会被设为缺省值
可以看到,setValue()支持Object列表,这对于同时插入多个数据很有帮助,另外还支持Map< String, Object >,利用映射的特点,我们可以将节点路径作为键,要插入的数据作为值,就可以做到在多个位置同时进行写入了
如果希望在指定节点下进行写入,可以使用child()方法先定位到该节点下再写入,child()方法返回DatabaseR