Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/220.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
可以在单个Java文件中调用两个不同的Firebase实时数据库树吗?_Java_Android_Firebase_Firebase Realtime Database - Fatal编程技术网

可以在单个Java文件中调用两个不同的Firebase实时数据库树吗?

可以在单个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"); 根据您的评论,如果您需要从两个

目前,我正在调用“Property”的引用,但同时我也想调用“Geo fence”的引用。可以在同一个Java文件中实现吗?我希望从财产和“地理围栏”的数据被用于一个片段。其他解决办法将不胜感激

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