在方法外传递值
Pass the value outside of a method
我已将位置源和目标声明为全局变量。但是尽管我没有在 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;
}
Firebase APIs 是异步的,这意味着 onLocationResult()
方法 returns 在它被调用后立即执行,并且任务 returns 的回调将是一段时间后打电话。无法保证需要多长时间,可能需要几百毫秒到几秒才能获得数据。
因为该方法 returns,您尝试 return 作为方法结果的 dist
变量的值不会从尚未回调
基本上,您正在尝试从异步的 API 中同步 return 一个值。那不是一个好主意。您应该按预期异步处理 APIs。
一个快速解决这个问题的方法是只在 onLocationResult()
方法中使用你的 dist
变量的值,否则我建议你从这个 in which I have explained how it can be done using a custom callback. You can also take a look at this video 为了更好的理解。
我已将位置源和目标声明为全局变量。但是尽管我没有在 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;
}
Firebase APIs 是异步的,这意味着 onLocationResult()
方法 returns 在它被调用后立即执行,并且任务 returns 的回调将是一段时间后打电话。无法保证需要多长时间,可能需要几百毫秒到几秒才能获得数据。
因为该方法 returns,您尝试 return 作为方法结果的 dist
变量的值不会从尚未回调
基本上,您正在尝试从异步的 API 中同步 return 一个值。那不是一个好主意。您应该按预期异步处理 APIs。
一个快速解决这个问题的方法是只在 onLocationResult()
方法中使用你的 dist
变量的值,否则我建议你从这个