You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android开发:如何获取Firebase push()生成的唯一节点ID?

解决Firebase获取push生成的唯一ID问题

嘿,我来帮你搞定这个问题!你现在遇到的情况很常见——你监听的是test这个父节点,所以dataSnapshot.getKey()返回的自然是父节点的名称"test"。而你要的那个push生成的唯一ID(LBpjFMIPq-kQWyBmqf7),其实是test节点下的子节点的key,得换个方式获取才行。

我给你两种场景的解决方案:

场景1:读取已存在的push节点ID

如果是要获取test节点下已经存在的所有push生成的ID,你需要遍历test的子节点:

package com.example.happy.firebasetest;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        DatabaseReference testRef = FirebaseDatabase.getInstance().getReference("test");
        testRef.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                // 遍历test下的所有子节点,每个子节点就是push生成的节点
                for (DataSnapshot childSnapshot : dataSnapshot.getChildren()) {
                    String pushId = childSnapshot.getKey(); // 这里就能拿到你要的LBpjFMIPq-kQWyBmqf7
                    String strValue = childSnapshot.child("str").getValue(String.class);
                    Log.d("FirebaseDemo", "Push唯一ID: " + pushId + ", 对应值: " + strValue);
                }
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {
                Log.e("FirebaseDemo", "读取数据出错", databaseError.toException());
            }
        });
    }
}

场景2:刚执行push操作时直接获取ID

如果是你自己刚调用push()写入数据,其实不用等监听,在push的时候就能直接拿到ID:

DatabaseReference testRef = FirebaseDatabase.getInstance().getReference("test");
// 先生成push节点,此时就能拿到它的ID
DatabaseReference newPushRef = testRef.push();
String pushId = newPushRef.getKey(); // 直接获取唯一ID
// 再往这个节点写入数据
newPushRef.child("str").setValue("value-a");

简单来说,核心就是:你要获取哪个节点的key,就得确保你的DataSnapshot对应的是那个节点。之前的snapshot是父节点test的快照,所以key是test;换成子节点的快照,就能拿到push生成的唯一ID啦。

内容的提问来源于stack exchange,提问作者JillAndMe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:39:18