java - 从 Firebase 数据库读取特定数据

标签 java android firebase firebase-realtime-database

我正在尝试从当前用户加载特定的子项,但它显示的是所有用户的信息。

image of Firebase database screenshot of emulator

    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        final View v = inflater.inflate(R.layout.activity_user_profile, container, false);

        btEdit = v.findViewById(R.id.button_edit);
        mChildValueTextView = v.findViewById(R.id.childValueTextView);
        FirebaseDatabase database = FirebaseDatabase.getInstance();
        final DatabaseReference mRef = database.getReference("Users");

        mRef.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                String childValue = String.valueOf(dataSnapshot.getValue());
                mChildValueTextView.setText(childValue);
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) 
    {

最佳答案

使用以下代码行:

String childValue = String.valueOf(dataSnapshot.getValue());

这意味着您将获取 Users 节点中的所有用户。如果您想获取单个用户(即经过身份验证的用户),您应该在树中更深入一层。我假设 fp60 ... Xez1 是来自身份验证过程的用户的 id,要获取其数据,请使用以下代码行:

String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference uidRef = rootRef.child("Users").child(uid);
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        String age = dataSnapshot.child("age").getValue(String.class);
        String name = dataSnapshot.child("name").getValue(String.class);
        String sex = dataSnapshot.child("sex").getValue(String.class);
        Log.d("TAG", name + ", " + sex + ", " + age);
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        Log.d("TAG", databaseError.getMessage()); //Don't ignore errors!
    }
};
uidRef.addListenerForSingleValueEvent(valueEventListener);

假设经过身份验证的用户的 uid 为上面示例中的 fp60 ... Xez1,则 logcat 中的输出将是:

carlostest2, m, 28

关于java - 从 Firebase 数据库读取特定数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58754022/

相关文章:

java - 如何将 .apk 文件转换为 java

java - 是否可以使用扫描仪输入不同对象的值?

android - 从 ip 地址获取广播地址的最佳方法是什么?

swift - context.fill() 没有显示 Swift 4 Xcode 10

java - 有什么方法可以找出java中图像文件中的主要颜色吗?

java - 使用 java 进行保留。评估失败错误 127

java - "Could not find mopub-android-sdk.apk!"

android - 从 Android 手机向 Raspberry Pi 接收 NFC/NDEF 消息

javascript - 'string' 类型的参数不可分配给 'AbstractControl' 类型的参数。 Angular react 形式

ios - 添加 Firebase 用户 Swift 时出错