如何从单一用户ID Firebase Android检索数据

如何从单一用户ID Firebase Android检索数据,android,android-studio,firebase,firebase-realtime-database,userid,Android,Android Studio,Firebase,Firebase Realtime Database,Userid,在我的firebase数据库中,我有一个包含不同信息的用户列表。我想从单个用户ID中检索信息,我将在代码中定义该用户ID,我只想从该用户处获取信息 我的数据看起来像 UserTable { "fmXWU324VHdDb8v6h7gvNjRojnu33" : { "-KbJtw467nl6p253HZ537" : { "Name" : "name1", "Email" : "something1@something.com", "userid" :

在我的firebase数据库中,我有一个包含不同信息的用户列表。我想从单个用户ID中检索信息,我将在代码中定义该用户ID,我只想从该用户处获取信息

我的数据看起来像

UserTable
{
  "fmXWU324VHdDb8v6h7gvNjRojnu33" : {
    "-KbJtw467nl6p253HZ537" : {
      "Name" : "name1",
      "Email" : "something1@something.com",
      "userid" : "fmXWU324VHdDb8v6h7gvNjRojnu33"
    }
  },
  "pJtC45fW0MMi352UiPWnWdIS7h88" : {
    "-Kb012ls9iMnzEL723o9I" : {
      "Name" : "name2",
      "Email" : "something2@something.com",
      "userid" : "pJtC45fW0MMi352UiPWnWdIS7h88"
    },
    "-Kb0aq0q25FJq38256SrC" : {
      "Name" : "name3",
      "Email" : "something3@something.com",
      "userid" : "pJtC45fW0MMi352UiPWnWdIS7h88"
    },
    "-Kb0atopfK64F6jy124Qi1u" : {
      "Name" : "name3",
      "Email" : "something1@something.com",
      "userid" : "pJtC45fW0MMi352UiPWnWdIS7h88"
  }
} 
例如,我想读取并显示来自该用户的所有数据
“fmXWU324VHdDb8v6h7gvNjRojnu33”
。我不知道我怎样才能做到这一点。我试过这个,这似乎合乎逻辑,但似乎不起作用:

df.child("UserTable").child(user.getUid())).addChildEventListener(new ChildEventListener()
它给出了以下错误:

Can't convert object of type java.lang.String to type com.android.example.UserTable
此外,我尝试过:

df.child("UsersTable").child("userid").child(user.getUid()).ad‌​dChildEventListener(‌​new ChildEventListener() 
我似乎能找出我做错了什么,因为我所尝试的似乎是合乎逻辑的,应该是可行的。请有人帮我一下

编辑:

public ArrayList<data> get(String userID){

      df.child("UsersTable").child(userID).ad‌​dChildEventListener(‌​new ChildEventListener()  {
    @Override
    public void onChildAdded(DataSnapshot dataSnapshot, String s) {
        fetch(dataSnapshot);
    }

    @Override
    public void onChildChanged(DataSnapshot dataSnapshot, String s) {
        fetch(dataSnapshot);
    }

    @Override
    public void onChildRemoved(DataSnapshot dataSnapshot) {

    }

    @Override
    public void onChildMoved(DataSnapshot dataSnapshot, String s) {

    }

    @Override
    public void onCancelled(DatabaseError databaseError) {

    }
});

return data;

首先像这样初始化数据库

mDatabase= FirebaseDatabase.getInstance().getReference().child("your_node_name");
然后尝试将
ValueEventListener
设置为数据库引用。 在
onDataChange
方法中,您可以像这样检索数据

public void onDataChange(DataSnapshot dataSnapshot) {
    User user= dataSnapshot.getValue(User.class);
}
编辑:

ValueEventListener postListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        User user= dataSnapshot.getValue(User.class);
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {

    }
};
mDatabase.addValueEventListener(postListener);

使用此选项将解决您的问题。

添加值事件侦听器,而不是子事件侦听器

df.child("UsersTable").child(user.getUid()).addValueEventListener(newValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
           if(dataSnapshot!=null){
             fetch(dataSnapshot);
           }
        }

        @Override
        public void onCancelled(FirebaseError firebaseError) {

        }
    });


您可以在子事件侦听器中添加代码吗。错误似乎从那里传播。请参阅更新为什么要在u_id内使用密钥?它的推送id将来自同一用户的条目存储为unique。因为1个用户可以在他们的id下添加多个数据,我希望每个数据都是唯一的,并且不会覆盖以前的OHK I添加解决方案检查ITI,很抱歉,我不确定这将如何工作,因为您尚未添加任何侦听器。目前我的代码是,我可以检索数据,但数据是从所有用户检索的,我只想从定义的userid获取感谢更新,我可以检查如何仅从一个用户(对于我为其提供userid的用户)检索数据吗?我与ChildEventListener面临相同的情况,您可以在数据库引用中使用ValueEventListener,并将引用更改为
mDatabase=FirebaseDatabase.getInstance().getReference().child(“您的节点名称”).child(“用户ID”)您知道如何在给定uId和pushID的情况下从firebase中删除特定条目吗?您好,我遇到了以下错误:无法将java.lang.String类型的对象转换为com.android.example.UserTable类型您正在使用fetch(dataSnapshot);方法?是的。我在该方法中有一个for循环,用于(DataSnapshot userDetails:DataSnapshot.getChildren()从您的获取(DataSnapshot)中删除该循环;然后运行。请参阅更新。如果我删除循环,将如何检索数据您知道如何在给定uId和pushID的情况下从firebase中删除特定条目吗?请尝试此
firebaseRef.child(uid).removeValue()
删除
ref.child(userid).setValue(null);
  DatabaseReference mDatabase = FirebaseDatabase.getInstance().getReference();
mDatabase.child("UsersTable").child(FirebaseAuth.getInstance().getCurrentUser().getUid()).addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        if(dataSnapshot.exists())
        {
            for(DataSnapshot userDetails : dataSnapshot.getChildren()) {
                Log.d("valueName:", userDetails.child("Name").getValue());
                Log.d("valueEmail:", userDetails.child("Email").getValue());
                Log.d("valueuserid:", userDetails.child("userid").getValue());
            }
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {

    }
});
df.child("UsersTable").child(user.getUid()).addValueEventListener(newValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
           if(dataSnapshot!=null){
             fetch(dataSnapshot);
           }
        }

        @Override
        public void onCancelled(FirebaseError firebaseError) {

        }
    });