我在实时数据库(“体育”)中有一个路径,其中的数据将使用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
答案 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);