如何从单个userID Firebase Android中检索数据

时间:2017-01-25 12:44:22

标签: android android-studio firebase firebase-realtime-database userid

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

我的数据看起来像;

public static List<?> splitCommaSeparatedStringToListAnyDataTypeArray(String s) {
    List<String> ints = new ArrayList<>();
    if (isNull(s)) {
        return ints;
    }
    String[] split = s.split(COMMA);
    for (String st : split) {
        ints.add(String.valueOf(st));
    }
    return ints;
}

我想说,例如,阅读并显示来自此用户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;

3 个答案:

答案 0 :(得分:1)

首先像这样初始化你的数据库

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);

答案 1 :(得分:1)

  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) {

    }
});

使用它可以解决您的问题。

答案 2 :(得分:0)

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

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) {

        }
    });