我不熟悉firebase
和nosql
数据库
我正在尝试从Firebase检索一些特定数据。我有一个节点universities
,该节点具有许多唯一标识符,因为该节点具有更多数据。我想从每个节点检索name
。
请看一下这个。
到目前为止我已经尝试过:我试过使用addChildEventListener
,但它只监听第一个子节点。我调试过它,它只显示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
,它监听整个节点并返回整个数据,但我无法提取"name",因为它包含唯一标识符。
请给我指路。
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) {
}
});
5条答案
按热度按时间nle07wnf1#
如果您使用
addValueEventListener
从Firebase检索所有大学或者如果您使用
addChildEventListener
hfyxw5xn2#
关于Linh关于使用
addEventListener
方法的回答,你可以使用GenericTypeIndicator
来直接创建你需要的对象列表,下面是一个简单的例子:希望这个答案能有所帮助。
okxuctiv3#
您可以使用Query的equalTo(),其中您可以传递自定义字符串以与firebase数据库匹配。
您可以使用这种方法创建查询并设置侦听器
有关详细信息,请参阅this线程。
Here是firebase官方提供的一个很好的例子,参考一下,你就会明白了
zpqajqem4#
类用户
列出与类的绑定
100%有效
klr1opcd5#
我也遇到过同样的问题,你可以在Model类中改变访问说明符,即public到private,这样问题就解决了