使用具有简单数据结构的Firebase,我不知道如何读取包含唯一键的数据。密钥使用以下方式生成:
String key = myRef.child("users").push().getKey();
并添加我的数据可以正常使用:
myRef.child("users").child(userID).child("favorites").child(key).setValue(newSite);
我的数据结构简单:
Users
- UserID
- Favorites
- KEY : VALUE
我能够看到我的数据,如showData(dataSnapshot):
for(DataSnapshot ds : dataSnapshot.getChildren()){
String data = ds.child(userID).child("favorites").getValue().toString();
Log.v("DATA", "DATA: " + data);
}
数据返回:例如{-L-DpQQCX8GYKPWclOX4=test}
。我们是否要迭代返回的对象?或者我是否对Firebase做错了,应该以某种方式得到每个值?如果有相关文档,请分享链接。我没有找到随机密钥。
编辑:::
我的听众是:
myRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
showData(dataSnapshot);
}
@Override
public void onCancelled(DatabaseError error) {
// Failed to read value
Log.w(TAG, "Failed to read value.", error.toException());
}
});
我能够通过解析对象来查看关键数据:
JSONObject json = null;
try {
json = new JSONObject(data);
} catch (JSONException e) {
e.printStackTrace();
}
for(Iterator<String> iter = json.keys();iter.hasNext();) {
String key = iter.next();
Log.e("KEY",key);
array.add(key);
}
答案 0 :(得分:0)
要从Firebase数据库获取数据,您无需使用JSONObject
。你可以简单地附加一个监听器并使用dataSnapshot
遍历getChildren()
对象,如下所示:
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference favoritesRef = rootRef.child("users").child(userID).child("favorites");
ValueEventListener eventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot ds : dataSnapshot.getChildren()) {
String key = ds.getKey();
String value = ds.getValue(String.class);
Log.d("TAG", key + value);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {}
};
favoritesRef.addListenerForSingleValueEvent(eventListener);
使用此代码,您可以从favorites
位置获取所有键和值。