Java 如何在Android Studio中使用Firebase仅从当前登录用户的值填充CardView?

Java 如何在Android Studio中使用Firebase仅从当前登录用户的值填充CardView?,java,android,firebase-realtime-database,firebaseui,Java,Android,Firebase Realtime Database,Firebaseui,我的项目结构如下: 任何用户都可以在Firebase上注册。每个注册用户下都有一个子项,名为“transactions” 因此,用户可以在此子项下发布(推送)多个帖子。此子项下的每个帖子都有一个唯一的id,后面是另一个名为“trans”的子项。所以我的数据库看起来像:../Users/transactions/someid/trans。 检查上传的图片 直奔我的问题:我想获取这个子项(事务)下的所有数据,而这些数据应该只针对当前登录的用户 作为一名新手,我所做的尝试毫无意义,如下所示: mDa

我的项目结构如下: 任何用户都可以在Firebase上注册。每个注册用户下都有一个子项,名为“transactions” 因此,用户可以在此子项下发布(推送)多个帖子。此子项下的每个帖子都有一个唯一的id,后面是另一个名为“trans”的子项。所以我的数据库看起来像:../Users/transactions/someid/trans。 检查上传的图片

直奔我的问题:我想获取这个子项(事务)下的所有数据,而这些数据应该只针对当前登录的用户

作为一名新手,我所做的尝试毫无意义,如下所示:

mDatabase = FirebaseDatabase.getInstance().getReference().child("Users");
refTransactions = mDatabase.child("transactions"); //points to Users/transactions
refTrans = refTransactions.child("trans"); //points to Users/transactions/trans
然后


错误在于以下几行:

mDatabase = FirebaseDatabase.getInstance().getReference().child("Users");
refTransactions = mDatabase.child("transactions"); //points to Users/transactions
refTrans = refTransactions.child("trans"); //points to Users/transactions/trans
JSON中没有节点
Users/transactions/trans
,因此这是对不存在节点的引用。相反,您拥有的是
Users/$uid/transactions/$pushid/trans
,您的代码必须考虑这两个动态级别

第一个相对简单,因为您希望显示当前用户的事务。因此,我们可以确定当前用户的UID,并通过以下方式构建对其事务的引用:

mDatabase = FirebaseDatabase.getInstance().getReference().child("Users");
if (FirebaseAuth.getInstance().getCurrentUser() != null) {
  String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
  refTransactions = mDatabase.child(uid).child("transactions");
}
现在我们有了一个指向用户事务的引用点,可以将其传递给FirebaseUI适配器


然后,适配器将为
refTransactions
下的每个子节点创建一个视图持有者,并使用该项目的
AllUsers.class
对象调用
populateViewHolder

但是,我们仍然需要满足每个孩子的
trans
节点,这需要在Java类中完成。与JSON匹配的最简单类是:

public class TransClass {
  public String trans;
}
因此,该类匹配
事务
的每个子项下的子节点/属性

您可以将其传递给适配器的生成器,然后在其
populateViewHolder
方法中从
TransClass
填充数据:

FirebaseRecyclerAdapter<AllUsers, MainActivity.BlogzoneViewHolder> FBRA = new FirebaseRecyclerAdapter<AllUsers, MainActivity.BlogzoneViewHolder>(
        TransClass.class,
        R.layout.trans_items,
        MainActivity.BlogzoneViewHolder.class,
        refTransactions
) {
    ...
FirebaseRecyclerAdapter FBRA=新的FirebaseRecyclerAdapter(
跨班级,
R.layout.trans_项目,
MainActivity.BlogzoneViewHolder.class,
参考交易
) {
...

错误在以下几行:

mDatabase = FirebaseDatabase.getInstance().getReference().child("Users");
refTransactions = mDatabase.child("transactions"); //points to Users/transactions
refTrans = refTransactions.child("trans"); //points to Users/transactions/trans
JSON中没有节点
Users/transactions/trans
,因此这是对不存在节点的引用。相反,您拥有的是
Users/$uid/transactions/$pushid/trans
,您的代码必须考虑这两个动态级别

第一种方法相对简单,因为您希望显示当前用户的事务。因此,我们可以确定当前用户的UID,并使用以下方法构建对其事务的引用:

mDatabase = FirebaseDatabase.getInstance().getReference().child("Users");
if (FirebaseAuth.getInstance().getCurrentUser() != null) {
  String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
  refTransactions = mDatabase.child(uid).child("transactions");
}
现在我们有了一个指向用户事务的引用点,可以将其传递给FirebaseUI适配器


然后,适配器将为
refTransactions
下的每个子节点创建一个视图持有者,并使用该项目的
AllUsers.class
对象调用
populateViewHolder

但是,我们仍然需要满足每个子节点的
trans
节点,这需要在Java类中完成。与JSON匹配的最简单类是:

public class TransClass {
  public String trans;
}
因此,该类匹配
事务
的每个子项下的子节点/属性

您可以将其传递给适配器的生成器,然后在其
populateViewHolder
方法中从
TransClass
填充数据:

FirebaseRecyclerAdapter<AllUsers, MainActivity.BlogzoneViewHolder> FBRA = new FirebaseRecyclerAdapter<AllUsers, MainActivity.BlogzoneViewHolder>(
        TransClass.class,
        R.layout.trans_items,
        MainActivity.BlogzoneViewHolder.class,
        refTransactions
) {
    ...
FirebaseRecyclerAdapter FBRA=新的FirebaseRecyclerAdapter(
跨班级,
R.layout.trans_项目,
MainActivity.BlogzoneViewHolder.class,
参考交易
) {
...

对于有关android studio IDE本身的问题,请仅使用
android studio
标记。对于一般的android编程问题,请使用
android
标记。请包括导致应用程序崩溃的错误日志。此外,提供allUsers.getTrans()中的代码-据我所知,您在本问题中的任何代码中都没有实际使用dbRef。有关android studio IDE本身的问题,请仅使用
android studio
标记。有关android编程的一般问题,请使用
android
标记。请包含正在崩溃的错误日志此外,请提供allUsers.getTrans()中的代码-据我所知,您并没有在本问题中包含的任何代码中实际使用dbRef。我对您的代码有点困惑,您建议了另一个类,即TransClass,并且我们仍然有这个类。AllUsers,请您将此代码放在一个代码中,以便我理解,或者简单地复制并粘贴到我的代码中。Be由于这些单独的部分我无法将它们组合起来。您没有共享您的
AllUsers
,因此我显示了与
事务
节点的子节点相匹配的最小类。由于您只想显示当前用户的事务,因此不需要其他类。检查我添加了AllUsers类,只是我将其命名为It诱惑用户,但它只显示当前用户的事务。如果可能的话,请帮助我组合代码,而不是我无法组合的片段,嗯,新字节这与您的JSON不匹配:
private String transactions;
。您的JSON中没有String
transactions
。这是一个子模式。您尝试过我的代码吗?不用担心,just想明确说明我为什么要回滚它。我对你的代码有点困惑,你建议了另一个类,即TransClass,我们仍然有这个类。AllUsers,请你把这个代码放在一个代码中以便我理解它,或者简单地复制并粘贴到我的代码中。因为这些单独的部分我无法组合在一起Hem您没有共享您的
诱惑者
,因此我显示了与孩子匹配的最小类