[英]How to retrieve specific list of data from firebase
I am new to firebase
and nosql
database 我是
firebase
和nosql
数据库的新手
I am trying to retrieve some specific data from a Firebase. 我正在尝试从Firebase中检索一些特定数据。 I have a node
universities
and that node has many unique identifier as node which has so more data into it. 我有一个节点
universities
,该节点有许多唯一标识符作为节点,它有更多的数据。 I want to retrieve name
from each node. 我想从每个节点检索
name
。
Please have a look at this. 请看看这个。
What I have tried so far: I tried using addChildEventListener
but this only listens first child. 到目前为止我尝试过:我尝试使用
addChildEventListener
但这只是监听第一个孩子。 I've debugged it and it was only showing the values of the first child of universities
node. 我调试了它,它只显示了
universities
节点的第一个孩子的值。
myRef.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
List<University> university = new ArrayList<>();
Map<String, Object> td = (HashMap<String, Object>) dataSnapshot.getValue();
Log.d("TAG",dataSnapshot.getValue().toString());
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
I have also tried addValueEventListener
. 我也尝试过
addValueEventListener
。 This listens the whole node and return whole data, but I am unable to extract "name" for it since it contains unique identifiers. 这会侦听整个节点并返回整个数据,但我无法为其提取“名称”,因为它包含唯一标识符。
Please guide me into the right directions. 请引导我进入正确的方向。
myRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
University university = dataSnapshot.getValue(University.class);
List<University> universities = (List<University>) dataSnapshot.getValue(University.class);
*//*List<String> lst = new ArrayList<String>();
for(DataSnapshot dsp : dataSnapshot.getChildren()){
lst.add(dsp.getKey());
}
Log.d("TAG",lst.toString());*//*
Map<String, Object> td = (HashMap<String, Object>) dataSnapshot.getValue();
*//*List<Object> values = new ArrayList<Object>(td.values());
List<String> list=new ArrayList<String>();
for(int i=0; i<values.size(); i++){
list.add((String) values.get(i));
}*//*
Log.d("TAG", university.toString());
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
If you using addValueEventListener
for retrieve all university from Firebase 如果您使用
addValueEventListener
从Firebase检索所有大学
List<University> universityList = new ArrayList<>();
myRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
universityList.clear();
for (DataSnapshot postSnapshot: snapshot.getChildren()) {
University university = postSnapshot.getValue(University.class);
universityList.add(university);
// here you can access to name property like university.name
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
System.out.println("The read failed: " + firebaseError.getMessage());
}
});
Or if you using addChildEventListener
或者如果您使用
addChildEventListener
List<University> universityList = new ArrayList<>();
myRef.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
University university = dataSnapshot.getValue(University.class);
universityList.add(university);
Log.i(TAG,"add university name = " + university.name);
...
}
...
}
You can use equalTo() of Query in which you can pass your custom string to match with firebase database. 您可以使用Query的 equalTo(),您可以在其中传递自定义字符串以与firebase数据库匹配。
like this way you can create your Query and set listener with that 像这样你可以用它创建你的Query并设置监听器
Query queryRef = myFirebaseRef.orderByChild("name").equalTo("some name");
refer this thread for more. 请参阅此主题以获取更多信
Here is nice example from firebase officials, refer that and you will get clear idea 这是firebase官员的一个很好的例子,请参考,你会得到清晰的想法
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {
User user = postSnapshot.getValue(User.class);
list.add(user);
}
}
class User 类用户
class User{
String name;
String phone;
public String getname() {
return name;
}
public void setname(String name) {
this.name = name;
}
public String getphone() {
return phone;
}
public void setphone(String phone) {
this.phone = phone;
}
List bind with class 列出与类绑定
List<User> list== new ArrayList <>();
100% it will work 100%它会工作
Regarding Linh's answer about using the addEventListener
method. 关于Linh关于使用
addEventListener
方法的答案。 You can use GenericTypeIndicator
in order to directly create the list of objects you'll be needing. 您可以使用
GenericTypeIndicator
直接创建您需要的对象列表。 Here's a quick example: 这是一个简单的例子:
List<University> universityList = new ArrayList<>();
myRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
GenericTypeIndicator<List<University>> t = new GenericTypeIndicator<List<University>>() {};
universityList = snapshot.getValue(t);
}
@Override
public void onCancelled(DatabaseError databaseError) {
System.out.println("The read failed: " + firebaseError.getMessage());
}
});
Hope this answer helps. 希望这个答案有所帮助
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.