如何从Firebase中检索特定的数据列表

我是firebasenosql数据库的新手

我正在尝试从Firebase中检索一些特定的数据。 我有一个节点的universities ,该节点有许多独特的标识符作为节点,它有更多的数据。 我想从每个节点检索name

请看看这个。

在这里输入图像说明

我到目前为止所尝试的:我尝试使用addChildEventListener但这只能侦听第一个孩子。 我已经debugging过了,它只显示了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) { } }); 

我也尝试过addValueEventListener 。 这监听整个节点,并返回整个数据,但我无法提取“名称”,因为它包含唯一的标识符。

请引导我进入正确的方向。

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

Solutions Collecting From Web of "如何从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()); } }); 

或者如果你使用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); ... } ... } 

您可以使用查询的 equalTo(),您可以在其中传递自定义string以与Firebase数据库匹配。

像这样,你可以创build你的查询并设置监听器

 Query queryRef = myFirebaseRef.orderByChild("name").equalTo("some name"); 

参考这个线程更多。

这里是来自Firebase官员的一个很好的例子,提到这一点,你会得到清晰的想法