Java 如何从侦听器获取数据?

Java 如何从侦听器获取数据?,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,我正在使用Android、iOS和Firebase跨平台构建我的应用程序。在iOS应用程序中,我有一个选项可以让司机对请求的车程进行出价,而在android应用程序中,这只是一个计算价格 如果Android车手请求使用iOS驱动程序乘坐,iOS驱动程序可以提供折扣出价,而不是计算的ridePrice 在Firebase中,在RiderRequests节点中,它添加ridePrice作为要支付的价格,但如果是出价,它还添加bidPrice。我试图设置它,如果“ridebiprice”存在,那么ri

我正在使用Android、iOS和Firebase跨平台构建我的应用程序。在iOS应用程序中,我有一个选项可以让司机对请求的车程进行出价,而在android应用程序中,这只是一个计算价格

如果Android车手请求使用iOS驱动程序乘坐,iOS驱动程序可以提供折扣出价,而不是计算的ridePrice

在Firebase中,在RiderRequests节点中,它添加
ridePrice
作为要支付的价格,但如果是出价,它还添加bidPrice。我试图设置它,如果“ridebiprice”存在,那么
rideAmt=ridebiprice
但是如果不存在,那么
rideAmt=ridePrice

不幸的是,我现在做的不是使用
PayPalPayment
方法

我该怎么做

firebase数据库:

“RideRequests”:{
“Builpwnefgmzjwn3jib9iws8r74d2”:{//骑手Id
“archiveTimestamp”:“2019-03-17 22:00”,
“当前地址”:“皮尔广场2号”,
“地址”:“科特内湾铜锣湾”,
“Destrat”:47.277879500000004,
“destLong”:-63.0443236999999,
“司机”:“迪安·温切斯特”,
“driverID”:“nD1v8oxHv3ObdQAKeKjuTt6f5TL2”,
“rideBidPrice”:5.74,
“ridePrice”:8.38,
“riderPaid”:“false”,
“状态”:“driverBid”,
“用户ID”:“buIpWNEFgmZJWN3jIB9IwS8r74d2”,
“用户名”:“riderANDROID”

}
您不能将
rideAmt
创建为全局变量,而只是在
payPalPayment()
方法中使用它,因为Firebase API是异步的,这意味着
onDataChange()
方法在调用后立即返回,它返回的任务的回调将在一段时间后调用。无法保证需要多长时间。因此可能需要几百毫秒到几秒钟才能获得数据。由于该方法立即返回,
rideA的值mt
变量您试图在
onDataChange()
方法之外使用它,但该变量尚未从回调中填充

基本上,您试图从异步API同步使用
rideAmt
的值。这不是一个好主意。您应该按照预期异步处理API

这个问题的一个快速解决方法是将
PayPayment()
方法中存在的所有逻辑移到
onDataChange()
方法中。这样,您试图获取的数据将在那时可用


如果您需要在回调之外使用它,我建议您查看我的anwser的最后一部分,我在其中解释了如何使用自定义回调。您也可以查看此,以便更好地理解。

创建将RIDEAM从我是监听器,所以在监听器中,您只需设置ridebiprice或ridePrice,并有一个单独的方法“BigDecimal getRideAmount(Object Object){}”根据您提出的规则返回正确的骑乘金额。此方法可以返回BigDecimal并直接用于paypal支付方法。我们不能将其设置为常量变量吗?它就像不同线程上的变量,我认为需要那些常量或静态方式来访问它。或者将
addListenerForSingleValueEvent
在您的
payPalPayment(){…}
中?我试过了。由于我现在看到的意图,它不起作用。您也犯了同样的错误。尝试记录
log.e(标记,“readData:value:+value”);
在回调之外是不起作用的。您必须做的是将所有逻辑移到
onCallback()中
method。这是异步编程。如果将log语句移动到方法中,是否具有预期的行为?我尝试像视频一样执行此操作,但仍然返回空值。我还尝试将侦听器放置在PayPalPayment方法中,并将PayPalmMethod放置在侦听器中,两者都无法工作,因为nt为贝宝vc。@LizG请用您尝试过的内容编辑您的问题。