在方法之外传递值

我已将 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;


}



长风秋雁
浏览 132回答 1
1回答

弑天下

Firebase API 是异步的,这意味着该onLocationResult()方法在调用后立即返回,并且它返回的 Task 的回调将在稍后调用。无法保证需要多长时间,可能需要几百毫秒到几秒钟才能获得数据。由于该方法会立即返回,因此dist您尝试作为方法的结果返回的变量的值将不会从回调中填充。基本上,您尝试从异步 API 同步返回值。这不是一个好主意。您应该按预期异步处理 API。一个快速解决这个问题的方法是dist仅在onLocationResult()方法内部使用变量的值,否则我建议您从这篇文章中查看我的答案的最后一部分,其中我已经解释了如何使用自定义回调来完成它。您也可以观看此视频以更好地理解。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java