Согласно вашему комментарию, если вам нужно получить latitude
и longitude
из обоих узлов и сравнить расстояние, предполагая, что оба свойства в обоих местах имеют тип double
и , а не строка, пожалуйста, используйте следующие строки кода:
String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference geoFenceUidRef = rootRef.child("Geo-fence").child(uid);
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
double geoFenceLat = dataSnapshot.child("Latitude").getValue(Double.class);
double geoFenceLng = dataSnapshot.child("Longitude").getValue(Double.class);
Location geoFenceLocation = new Location("");
geoFenceLocation.setLatitude(geoFenceLat);
geoFenceLocation.setLongitude(geoFenceLng);
Log.d(TAG, geoFenceLat + ", " + geoFenceLng);
DatabaseReference propertyUidRef = rootRef.child("Property").child(uid);
ValueEventListener eventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot ds : dataSnapshot.getChildren()) {
double propertyLat = ds.child("latitude").getValue(Double.class);
double propertyLng = ds.child("longitude").getValue(Double.class);
Log.d(TAG, propertyLat + ", " + propertyLng);
//Compare
Location propertyLocation = new Location("");
propertyLocation.setLatitude(propertyLat);
propertyLocation.setLongitude(propertyLng);
float distance = geoFenceLocation.distanceTo(propertyLocation);
Log.d(TAG, String.valueOf(distance));
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Log.d(TAG, databaseError.getMessage()); //Don't ignore errors!
}
};
propertyUidRef.addListenerForSingleValueEvent(eventListener);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Log.d(TAG, databaseError.getMessage()); //Don't ignore errors!
}
};
geoFenceUidRef.addListenerForSingleValueEvent(valueEventListener);
Если вы сохранили их в виде строк, измените приведенные выше строки кода на:
double geoFenceLat = Double.parseDouble(dataSnapshot.child("Latitude").getValue(String.class));
double propertyLng = Double.parseDouble(dataSnapshot.child("Longitude").getValue(String.class));
и
double propertyLat = Double.parseDouble(ds.child("latitude").getValue(String.class));
double propertyLng = Double.parseDouble(ds.child("longitude").getValue(String.class));