Liz*_*izG 5 java android firebase-realtime-database
我尝试在这里通过遵循不同的解决方案在两个方法之间传递一个值,但是传递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) {}
});
}
Run Code Online (Sandbox Code Playgroud)
我试图将价值"价格"传递给:
private void recordData(String riderId) {
getPrice();
Log.d(TAG, "recordData: price = " + price);
...
}
Run Code Online (Sandbox Code Playgroud)
getPrice()中的price值是应该的,但是当我在recordData()中打印出值时,value = null
任何帮助将不胜感激.
在评论中回答您的问题:您不必传递括号内的参数,因为您正在设置回调。
但你的问题来自于方法的优先级。当您调用 时,该值尚未存在recordData。
场景是,recordData您执行 line getPrice(),但执行不会等待getPrice()完成,因为它是一个回调,并且该值将在检索后立即返回,这可能是很长时间之后。为了证明这一点,你可以查看你的日志。该日志很可能是:
Log.d(TAG, "recordData: price = " + price);
Run Code Online (Sandbox Code Playgroud)
将在这之前:
Log.d(TAG, "getPrice: price = " + price);
Run Code Online (Sandbox Code Playgroud)
因此,最好的选择是在recordData确切知道该值已准备好时执行,或者在内部调用它onDataChange。
| 归档时间: |
|
| 查看次数: |
69 次 |
| 最近记录: |