我在Firebase中有以下数据库结构:
我想检索键的名称" name" (在这种情况下将是" b")。我知道关键-K_bWdgeYxYrdmzr67bJ
。这不需要有一个监听器。我该怎么做?
非常感谢
答案 0 :(得分:10)
这将100%适合您。
ref.child("-K_bWdgeYxYrdmzr67bJ").child("name").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
try {
if (snapshot.getValue() != null) {
try {
Log.e("TAG", "" + snapshot.getValue()); // your name values you will get here
} catch (Exception e) {
e.printStackTrace();
}
} else {
Log.e("TAG", " it's null.");
}
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void onCancelled(FirebaseError firebaseError) {
Log.e("onCancelled", " cancelled");
}
});
答案 1 :(得分:1)
你必须将监听器添加到-K_bWdgeYxYrdmzr67bJ的超级并从中获取Iterable。它会给你Iterable,然后你就可以获得你的价值。
Iterable<DataSnapshot> dsChildData = ds.getChildren();
这有助于您在-K_bWdgeYxYrdmzr67bJ的超级中获取所有对象。
要访问纬度和经度,您可以使用此
for(Datasnapshot dsChild : dsChildData){
MyModel mm = dsChild.getValue(MyModel.class);
}
您必须使用arrayList或List来存储模型类的所有节点。
答案 2 :(得分:0)
if (dataSnapshot.exists()) {
HashMap<String, Object> hashmap = new HashMap<>();
Iterator<DataSnapshot> friendsiterator = dataSnapshot.getChildren().iterator();
while (friendsiterator.hasNext()) {
DataSnapshot bdaySnapShaot = friendsiterator.next();
if (bdaySnapShaot.getKey().equals("latitude")) {
hashmap.put("latitude", bdaySnapShaot.getValue().toString());
} else if (bdaySnapShaot.getKey().equals("longitutde")) {
hashmap.put("longitutde", bdaySnapShaot.getValue().toString());
} else if (bdaySnapShaot.getKey().equals("name")) {
hashmap.put("name", bdaySnapShaot.getValue().toString());
}
}
}
答案 3 :(得分:0)
mDatabaseReport.getRef().addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot postSnapshot :dataSnapshot.getChildren()) {
TextView Push_Key = (TextView)findViewById(R.id.txt_points);
Push_Key.setText("" + postSnapshot.getKey());
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});