如何从匿名路径的实时数据库(Firebase)中检索数据

时间:2018-06-20 09:21:07

标签: android firebase firebase-realtime-database

我在实时数据库(“体育”)中有一个路径,其中的数据将使用setValue在用户声明的子名称下设置。如何从数据库中获取字符串。 示例-:用户在EditText中写一个名为userWrite的字符串,然后-:

mDatabase = FirebaseDatabase.getInstance().getReference("sports");
mDatabase.setValue.child(userWrite).setValue("Socks");

由于必须使用 ignoreExtraProperties 在“ Strings.class”中定义要检索的字符串,当无法在Strings.class文件中将其声明为字符串将由用户提供? (这对于我的项目的算法有效是必不可少的)

更新-: 用户可以创建一个userWrite并将其添加到数据库的次数没有限制,因此我需要一种方法,该方法将允许我直接搜索某个String而不用在Strings.class中声明它,我怀疑这是可能的,或者我需要一个可以在另一个Activity中声明String并使用get方法的方法        String check=AnotherClass.userWrite

数据树-:

Firebase-root
   |
   --- sports
         |
         --- pushID
            |
            ---userWrite
               |
                ---pushID-UserWrittenText

1 个答案:

答案 0 :(得分:1)

要解决此问题,您可以更改以下代码行:

mDatabase.setValue.child(userWrite).setValue("Socks");

mDatabase.child("userWrite").setValue(userWrite);

假设用户已经在EditText字符串Socks中编写了代码,那么您的数据库结构将如下所示:

Firebase-root
   |
   --- sports
         |
         --- userWrite: "Socks"

现在要获取userWrite属性Socks的值,请使用以下代码:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference userWriteRef = rootRef.child("sports").child("userWrite");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        String userWrite = dataSnapshot.getValue(String.class);
        Log.d("TAG", userWrite);
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
userWriteRef.addListenerForSingleValueEvent(valueEventListener);

根据您的评论,建议您创建一个地图并使用push()这样的方法:

mDatabase.child("userWrites").push().setValue(userWrite);

在这种情况下,您的数据库结构将如下所示:

Firebase-root
   |
   --- sports
         |
         --- userWrites
               |
               --- pushedIdOne: "Socks"
               |
               --- pushedIdTwo: "Another Pair of Socks"
               |
               --- //and so on

要获取所有这些新创建的属性的值,请使用以下代码:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference userWritesRef = rootRef.child("sports").child("userWrites");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            String userWrite = ds.getValue(String.class);
            Log.d("TAG", userWrite);
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
userWritesRef.addListenerForSingleValueEvent(valueEventListener);