在android studio中使用firebase实时数据库检索当前登录用户的数据

Posted

技术标签:

【中文标题】在android studio中使用firebase实时数据库检索当前登录用户的数据【英文标题】:Retrieving data of currently logged in user using firebase realtime database in android studio 【发布时间】:2021-05-29 12:45:16 【问题描述】:

我有一个应用程序,用户使用 Firebase 身份验证进行注册和登录,并保存联系信息。该应用程序显示插入到 firebase 数据库中的所有联系人数据。现在我想要做的是应用程序应该只显示当前登录用户插入的数据,而不是所有插入的数据。为此,我正在获取当前登录的用户 ID 并保存在 firbase 数据库中。下面的代码获取当前登录用户的id:

mAuth = FirebaseAuth.getInstance();
        mAuth.getCurrentUser();

        FirebaseUser mUser = mAuth.getCurrentUser();

        String uId = mUser.getUid();

并且这段代码用于在数据库中插入当前登录用户的id。

 Map<String,Object> map=new HashMap<>();
        map.put("name",name.getText().toString());
        map.put("course",course.getText().toString());
        map.put("email",email.getText().toString());
        map.put("uid",uId);
       
        FirebaseDatabase.getInstance().getReference().child("contacts").push()
                .setValue(map)
                .addOnSuccessListener(new OnSuccessListener<Void>() 
                    @Override
                    public void onSuccess(Void aVoid) 
                       name.setText("");
                       course.setText("");
                       email.setText("");
                      
                        Toast.makeText(getApplicationContext(),"Inserted Successfully",Toast.LENGTH_LONG).show();
                    
                )
                .addOnFailureListener(new OnFailureListener() 
                    @Override
                    public void onFailure(@NonNull Exception e)
                    
                        Toast.makeText(getApplicationContext(),"Could not insert",Toast.LENGTH_LONG).show();
                    
                );

为了在 recyclerview 中检索数据,我使用下面的代码。

 FirebaseRecyclerOptions<model> options=
                new FirebaseRecyclerOptions.Builder<model>()
                .setQuery(FirebaseDatabase.getInstance().getReference().child("contacts"),model.class)
                .build();

        myadapter=new myadapter(options);
        recyclerView.setAdapter(myadapter);

现在请告诉我一种方法,如何将插入到 firebase 数据库中的 uid 与当前登录用户的 id 进行比较,以仅获取当前登录用户插入的数据。 我读到以下查询可用于比较数据,但我不知道如何使用它。

Query query = ref.orderByChild("contacts").equalTo("48bde8f8-3b66-40bc-b988-566ccc77335c");

请指导我如何使用查询或方法来比较用户 ID 并检索当前登录用户插入的数据,而不是所有插入的数据。我会非常感谢你。

【问题讨论】:

【参考方案1】:

首先将用户节点的key设为用户的id,而不是push():

 Map<String,Object> map=new HashMap<>();
    map.put("name",name.getText().toString());
    map.put("course",course.getText().toString());
    map.put("email",email.getText().toString());
    map.put("uid",uId);
   
    FirebaseDatabase.getInstance().getReference().child("contacts").child(uId)
            .setValue(map)

然后,当您要检索特定的用户对象时,您可以从以下位置获取 uId:

String userId = FirebaseAuth.getInstance().getCurrentUser().getUId()

现在您可以将侦听器添加到此 DatabaseReference:

    DatabaseReference db = FirebaseDatabase.getInstance().getReference().child("contacts").child(userId)..... db.addValueEventListener().......
           

就是这样

【讨论】:

以上是关于在android studio中使用firebase实时数据库检索当前登录用户的数据的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Firebase 分析跟踪 android 片段

如何在android studio中更新maven依赖

如何在模块(Android Studio)中使用 com.android.databinding?

怎样在Android Studio中使用Uiautomator

在 android studio 中使用设备调试时,Android Logcat 为空

在Android Studio中使用lambda表达式