为了账号安全,请及时绑定邮箱和手机立即绑定

在方法之外传递值

在方法之外传递值

长风秋雁 2022-04-28 17:20:42
我已将 Location 源和目标声明为全局变量。但是虽然我没有在 dist 中得到正确的值。我应该如何在 geoFire.getLocation() 方法之外传递位置值?或者我如何通过geofire获得两个地理位置之间的距离?我尝试将源和目标设为静态。但它没有用。public double get_distance(String from, String to){    source = new Location("to");    destination = new Location("form");    DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference("users");    GeoFire geoFire = new GeoFire(databaseReference);    geoFire.getLocation(from, new LocationCallback() {        @Override        public void onLocationResult(String key, GeoLocation location) {            source.setLatitude(location.latitude);            source.setLongitude(location.longitude);            Log.e("source latlong b4 ",source.getLatitude()+"  ..  "+source.getLongitude()); // the right value is passed        }        @Override        public void onCancelled(DatabaseError databaseError) {        }    });    Log.e("source latlong ",source.getLatitude()+"  ..  "+source.getLongitude()); //value hase turned into 0.0    geoFire.getLocation(to, new LocationCallback() {        @Override        public void onLocationResult(String key, GeoLocation location) {            destination.setLatitude(location.latitude);            destination.setLongitude(location.longitude);        }        @Override        public void onCancelled(DatabaseError databaseError) {        }    });    Log.e("destination latlong", destination.getLatitude()+"  ..  "+destination.getLongitude());    dist= source.distanceTo(destination);    return dist;}
查看完整描述

1 回答

?
弑天下

TA贡献1818条经验 获得超8个赞

Firebase API 是异步的,这意味着该onLocationResult()方法在调用后立即返回,并且它返回的 Task 的回调将在稍后调用。无法保证需要多长时间,可能需要几百毫秒到几秒钟才能获得数据。

由于该方法会立即返回,因此dist您尝试作为方法的结果返回的变量的值将不会从回调中填充。

基本上,您尝试从异步 API 同步返回值。这不是一个好主意。您应该按预期异步处理 API。

一个快速解决这个问题的方法是dist仅在onLocationResult()方法内部使用变量的值,否则我建议您从这篇文章中查看我的答案的最后一部分,其中我已经解释了如何使用自定义回调来完成它。您也可以观看此视频以更好地理解。


查看完整回答
反对 回复 2022-04-28
  • 1 回答
  • 0 关注
  • 131 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信