如何在没有Geofire的情况下在firebase中保存位置对象?

时间:2018-05-19 06:41:06

标签: java android firebase firebase-realtime-database android-location

我不知道如何在不使用Geofire的情况下在Firebase中保存位置。一种可能的方法可能是仅将坐标保存到Firebase但查看位置对象(Android),它具有如此多的属性以及坐标。如何保存完整的对象并在以后检索它?

1 个答案:

答案 0 :(得分:1)

您可以按照以下步骤完成此操作。首先创建一个如下所示的模型类:

public class LocationModel {
    private double lat, lng;

    LocationModel() {}

    public LocationModel(double lat, double lng) {
        this.lat = lat;
        this.lng = lng;
    }

    public double getLat() { return lat; }
    public double getLng() { return lng; }
}

创建类的对象并将其添加到数据库中,如下所示:

LocationModel locationModel = new LocationModel(48.858383, 2.294480);
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference locationOneRef = rootRef.child("locations").child("locationOne");
locationOneRef.setValue(locationModel);

您的数据库应如下所示:

Firebase-root
   |
   --- locations
          |
          --- locationOne
                  |
                  --- lat: 48.858383
                  |
                  --- lng: 2.294480

要获取数据,请使用以下代码:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference locationOneRef = rootRef.child("locations").child("locationOne");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        double lat = dataSnapshot.child("lat").getValue(Double.class);
        double lng = dataSnapshot.child("lng").getValue(Double.class);
        Log.d("TAG", lat + / " + lng);
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
locationOneRef.addListenerForSingleValueEvent(valueEventListener);

输出将是:

48.858383 / 2.294480