Android Java开发:如何获取Firebase数据库的Key与ID
嘿,作为经常在Android Java项目里折腾Firebase的开发者,我来给你拆解下获取Key/ID的常见场景——分Realtime Database和Firestore两种情况说,毕竟这俩是Firebase最常用的数据库服务:
获取Firebase Realtime Database的Key/ID
1. 推送数据时获取自动生成的Key
当你用push()方法往Realtime Database里添加数据时,Firebase会自动生成一个唯一的Key,你有两种方式拿到它:
- 推送前预获取:适合需要提前用Key做关联的场景
// 获取数据库引用 DatabaseReference collectionRef = FirebaseDatabase.getInstance().getReference("your_target_collection"); // 生成并获取自动Key String autoGeneratedKey = collectionRef.push().getKey(); // 用这个Key写入数据 collectionRef.child(autoGeneratedKey).setValue(yourDataModel);
- 推送后回调中获取:如果需要确认数据写入成功后再拿Key
collectionRef.push().setValue(yourData, new DatabaseReference.CompletionListener() { @Override public void onComplete(@Nullable DatabaseError error, @NonNull DatabaseReference ref) { if (error == null) { String generatedKey = ref.getKey(); // 这里拿到的就是刚生成的唯一Key } else { // 处理写入失败的情况 } } });
2. 读取数据时获取子节点的Key
当你读取某个父节点下的所有子节点时,每个DataSnapshot都能通过getKey()方法拿到对应子节点的Key:
DatabaseReference collectionRef = FirebaseDatabase.getInstance().getReference("your_target_collection"); collectionRef.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(@NonNull DataSnapshot snapshot) { for (DataSnapshot childSnapshot : snapshot.getChildren()) { String childNodeKey = childSnapshot.getKey(); // 同时可以解析节点数据 YourDataModel model = childSnapshot.getValue(YourDataModel.class); // 比如把Key绑定到模型里 model.setNodeKey(childNodeKey); } } @Override public void onCancelled(@NonNull DatabaseError error) { // 处理读取失败的错误 } });
获取Firebase Firestore的Document ID/Key
Firestore里的文档ID就相当于Realtime Database的Key,同样分创建和读取两种场景:
1. 创建文档时获取自动生成的ID
- 预生成ID再写入:适合需要提前用ID做业务逻辑的场景
FirebaseFirestore db = FirebaseFirestore.getInstance(); CollectionReference colRef = db.collection("your_target_collection"); // 创建文档引用时自动生成ID DocumentReference docRef = colRef.document(); String autoDocId = docRef.getId(); // 写入数据 docRef.set(yourDataModel) .addOnSuccessListener(aVoid -> { // 数据写入成功,autoDocId就是生成的文档ID }) .addOnFailureListener(e -> { // 处理写入失败 });
add()方法回调中获取:直接添加文档后在成功回调里拿ID
colRef.add(yourDataModel) .addOnSuccessListener(documentReference -> { String generatedDocId = documentReference.getId(); // 这里拿到自动生成的文档ID }) .addOnFailureListener(e -> { // 处理错误 });
2. 读取文档时获取Document ID
当你查询集合中的文档时,每个QueryDocumentSnapshot都可以通过getId()获取对应的文档ID:
db.collection("your_target_collection").get() .addOnCompleteListener(task -> { if (task.isSuccessful()) { for (QueryDocumentSnapshot document : task.getResult()) { String docId = document.getId(); YourDataModel model = document.toObject(YourDataModel.class); // 把ID绑定到模型方便后续使用 model.setDocId(docId); } } else { // 处理查询失败的情况 } });
小提示:如果是你手动指定的Key/ID(比如创建节点/文档时自己设置了标识符),直接用你设置的那个值就好,上面的示例都是针对Firebase自动生成的唯一标识符。
内容的提问来源于stack exchange,提问作者Kneelon
相关产品推荐
相关产品推荐

