可以在单个Java文件中调用两个不同的Firebase实时数据库树吗?
目前,我正在调用“Property”的引用,但同时我也想调用“Geo fence”的引用。可以在同一个Java文件中实现吗?我希望从财产和“地理围栏”的数据被用于一个片段。其他解决办法将不胜感激可以在单个Java文件中调用两个不同的Firebase实时数据库树吗?,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,目前,我正在调用“Property”的引用,但同时我也想调用“Geo fence”的引用。可以在同一个Java文件中实现吗?我希望从财产和“地理围栏”的数据被用于一个片段。其他解决办法将不胜感激 reference = FirebaseDatabase.getInstance().getReference("Property"); refGeo = FirebaseDatabase.getInstance().getReference("Geo-fence"); 根据您的评论,如果您需要从两个
reference = FirebaseDatabase.getInstance().getReference("Property");
refGeo = FirebaseDatabase.getInstance().getReference("Geo-fence");
根据您的评论,如果您需要从两个节点获取
纬度
和经度
,并比较距离,假设两个位置的两个属性类型均为双
和非字符串,请使用以下代码行:
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));
及
不,不可能,我不知道如何从“geo-fence”树中获取数据,以便在有其他树调用的java文件中使用@GaneshPokale为了更好地理解,您想在
属性
和地理围栏
节点中查询数据库,并获得相同类型的对象吗?请为两个节点添加您的数据库结构,并使用@AlexMamodatabase picture added@AlexMamo回复。我想从geo fence获取所有数据,并计算lat/lng与物业之间的距离。我现在明白了,我会立即给您写一个答案。非常感谢,我已根据需要更改了您的代码。我让它工作了。
double propertyLat = Double.parseDouble(ds.child("latitude").getValue(String.class));
double propertyLng = Double.parseDouble(ds.child("longitude").getValue(String.class));