这是我的数据库结构:
Request节点的所有子节点都是时间戳。对于特定时间戳,在产品节点内,我想要检索对象productName的所有值。然后安排它们,使其成为电子邮件的正文。我坚持的部分是获取productName的数据。
到目前为止,我已经能够获取第二个节点中的总数据。我正在使用的代码是:
DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("Requests");
ref.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
collectProducts((Map<String, Object>) dataSnapshot.getValue());
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
private void collectProducts(Map<String, Object> value) {
ArrayList<String> products = new ArrayList<>();
for (Map.Entry<String, Object> entry : value.entrySet()){
Map singleUser = (Map) entry.getValue();
products.add((String) singleUser.get("total"));
}
Intent emailIntent = new Intent(Intent.ACTION_SEND);
emailIntent.setType("plain/text");
emailIntent.putExtra(Intent.EXTRA_EMAIL, "example@gmail.com");
StringBuilder sb = new StringBuilder();
for (String s : products) {
sb.append(s);
sb.append("\n");
}
emailIntent.putExtra(Intent.EXTRA_TEXT, sb.toString());
try {
startActivity(Intent.createChooser(emailIntent, "Send mail..."));
Log.i("Email sent!", "");
} catch (android.content.ActivityNotFoundException ex) {
Toast.makeText(Cart.this,
"There are no email clients installed.", Toast.LENGTH_SHORT).show();
}
}
但是获得productName没有运气。
我是Android和Firebase的新手。任何帮助表示赞赏。
答案 0 :(得分:0)
这样的事情可以解决问题:
DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("Requests");
ref.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot requestSnapshot: dataSnapshot.getChildren()) {
DataSnapshot productsSnapshot = requestSnapshot.child("products");
for (DataSnapshot productSnapshot: productsSnapshot.getChildren()) {
System.out.println(productSnapshot.child("productName").getValue(String.class));
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
throw databaseError.toException(); // don't ignore errors
}
});
主要差异:
DataSnapshot.getChildren()
循环播放儿童。DataSnapshot.child()
来处理特定的子快照。DataSnapshot.getValue()
来检索基元/字符串值。