在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实时数据库检索当前登录用户的数据的主要内容,如果未能解决你的问题,请参考以下文章
如何在模块(Android Studio)中使用 com.android.databinding?
怎样在Android Studio中使用Uiautomator