我想从Firebase数据库中获得唯一客户的最后一个“当前单位”。我是新来的。请帮我。这是我的数据库快照:
我尝试使用此代码。但没有值传递给textview。我不知道错误在哪里。不显示任何错误。
databaseBills = FirebaseDatabase.getInstance().getReference("bills");
Query lastQuery = databaseBills.child("bills").orderByKey().limitToLast(1);
lastQuery.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
String value = dataSnapshot.child("current_units").getValue(String.class);
textView17.setText(value);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
答案 0 :(得分:1)
您没有得到任何信息,因为您使用了错误的查询。您需要删除.child("bills")
调用,因为在bills
节点下没有另一个bills
子级。因此您的查询应如下所示:
Query lastQuery = databaseBills.orderByKey().limitToLast(1);
答案 1 :(得分:0)
对Firebase数据库执行查询时,可能会有多个结果。因此,快照包含这些结果的列表。即使只有一个结果,快照也会包含一个结果的列表。
您的代码需要通过遍历dataSnapshot.getChildren()
来处理该列表:
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot childSnapshot: dataSnapshot.getChildren()) {
String value = childSnapshot.child("current_units").getValue(String.class);
Log.d("onDataChange", "current_units="+value);
textView17.setText(value);
}
}
我强烈建议在进行故障排除时,始终在代码中添加上述类似的日志记录语句。如果日志显示一个值,但UI没有,则说明问题不在于从数据库读取。如果日志没有显示值,则说明从数据库读取是问题。无论哪种方式:您都减少了问题空间,可以提出更具针对性的问题。