【发布时间】:2018-06-30 00:42:29
【问题描述】:
我已尝试通过在此处遵循不同的解决方案在 2 个方法之间传递一个值,但传递的是 null。
我试图通过的代码:
private void getPrice() {
DatabaseReference dbRequest = FirebaseDatabase.getInstance().getReference(Common
.request_tbl).child(riderId).child("details"); // "Requests"
dbRequest.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot child : dataSnapshot.getChildren()) {
if (child.getKey().equals("price")) {
price = Double.valueOf(child.getValue().toString());
Log.d(TAG, "getPrice: price = " + price);
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {}
});
}
我试图将“价格”值传递给:
private void recordData(String riderId) {
getPrice();
Log.d(TAG, "recordData: price = " + price);
...
}
getPrice() 中 price 的值是应该的,但是当我打印出 recordData() 中的值时,value = null
【问题讨论】:
-
当您调用
Log行时,您的ValueEventListener.onDataChange方法可能还没有被调用,因为它是一个异步处理。回调方法基本上意味着“每当这将发生时,做 X”。当您的日志行假定变量已被该回调中的值填充时。 -
是的,它被调用了。我有一个按钮。当我按下按钮时,它会调用 recordData().. 我已经运行了很多次并且分辨率相同。
-
您正在设置回调。当您调用
recordData时,数据可能根本没有准备好,这就是为什么onDataChange中的Log有效而recordData中的Log无效。 -
实际上,数据是先添加到数据库中的,一旦骑手在另一个活动中请求乘车,然后将数据写入数据库,我试图从数据库中检索并放在其他地方通过调用 recordData() 在数据库中。
-
哦,好的。在
onDataChanged中Double.valueOf(child.getValue().toString());是否返回值?
标签: java android firebase-realtime-database