我已将 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()
方法内部使用变量的值,否则我建议您从这篇文章中查看我的答案的最后一部分,其中我已经解释了如何使用自定义回调来完成它。您也可以观看此视频以更好地理解。
添加回答
举报
0/150
提交
取消