gpt4 book ai didi

java - 是否可以在单个 Java 文件中从 Firebase 实时数据库调用两个不同的树?

转载 作者:行者123 更新时间:2023-12-02 09:58:09 25 4
gpt4 key购买 nike

database looked like this

目前,我正在调用“属性(property)”的引用,但同时我也想调用“地理围栏”的引用。是否可以在同一个 Java 文件中执行此操作?我希望在一个 fragment 中使用来自属性(property)和“地理围栏”的数据。其他解决方案将不胜感激。

reference = FirebaseDatabase.getInstance().getReference("Property");
refGeo = FirebaseDatabase.getInstance().getReference("Geo-fence");

最佳答案

根据您的评论,如果您需要从两个节点获取纬度经度并比较距离,假设两个地方的两个属性都是doublenot 字符串,请使用以下代码行:

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));

关于java - 是否可以在单个 Java 文件中从 Firebase 实时数据库调用两个不同的树?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55842400/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com