Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.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
根据子Firebase Android的值更改位置时更新标记_Android_Google Maps_Firebase_Firebase Realtime Database - Fatal编程技术网

根据子Firebase Android的值更改位置时更新标记

根据子Firebase Android的值更改位置时更新标记,android,google-maps,firebase,firebase-realtime-database,Android,Google Maps,Firebase,Firebase Realtime Database,我需要Firebase数据库的帮助 我想做的是在我的地图上显示所有来自可用工作人员的用户(例如,N2GCEIGYBaRiNrFPawklx1NymF3,运行5pazc0wnzym6yjrrtbqvxooh2) 这是Firebase数据库的屏幕截图 以下是我当前的代码: private void loadAllAvailableWorkers(final LatLng location) { //Delete markers on the map including client lo

我需要Firebase数据库的帮助

我想做的是在我的地图上显示所有来自可用工作人员的用户(例如,N2GCEIGYBaRiNrFPawklx1NymF3,运行5pazc0wnzym6yjrrtbqvxooh2)

这是Firebase数据库的屏幕截图

以下是我当前的代码:

private void loadAllAvailableWorkers(final LatLng location) {

    //Delete markers on the map including client location and available workers
    mMap.clear();

    //After delete, add location back
    mMap.addMarker(new MarkerOptions()
            .position(location)
            .icon(BitmapDescriptorFactory.fromResource(R.drawable.ic_client_marker))
    );

    //Load all available Workers
    DatabaseReference dbWorkerLocation = FirebaseDatabase.getInstance().getReference(Common.available_workers_table);
    GeoFire gfWorkerLocation = new GeoFire(dbWorkerLocation);

    GeoQuery gqWorkerLocation = gfWorkerLocation.queryAtLocation(new GeoLocation(location.latitude, location.longitude), distance);
    gqWorkerLocation.removeAllListeners();
    gqWorkerLocation.addGeoQueryEventListener(new GeoQueryEventListener() {
        @Override
        public void onKeyEntered(String key, final GeoLocation location) {
            FirebaseDatabase.getInstance().getReference(Common.user_workers_table)
                    .child(key)
                    .addListenerForSingleValueEvent(new ValueEventListener() {
                        @Override
                        public void onDataChange(DataSnapshot dataSnapshot) {
                            //Add plumber to the map
                            mMap.addMarker(new MarkerOptions()
                                    .position(new LatLng(location.latitude, location.longitude))
                                    .flat(true)
                                    .icon(BitmapDescriptorFactory.fromResource(R.drawable.ic_worker_marker))
                            );
                        }

                        @Override
                        public void onCancelled(DatabaseError databaseError) {

                        }
                    });
        }

        @Override
        public void onKeyExited(String key) {

        }

        @Override
        public void onKeyMoved(String key, GeoLocation location) {

        }

        @Override
        public void onGeoQueryReady() {
            //Distance will search within 3km
            if(distance <= LIMIT) {

                distance++;
                loadAllAvailableWorkers(location);
            }
        }

        @Override
        public void onGeoQueryError(DatabaseError error) {

        }
    });
}
这是我需要(再次)获取当前子用户ID的父级的部分


要解决此问题,请使用以下代码:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference availableWorkersRef = rootRef.child("AvailableWorkers");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot dSnapshot : dataSnapshot.getChildren()) {
            for(DataSnapshot ds : dSnapshot.getChildren()) {
                String name = ds.child("name").getValue(String.class);
                Log.d("TAG", name);
            }
        }
    }

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

输出将是所有可用工件的名称。

您想显示这些ID:
N2GCEIGYBaRiNrFPawklx1NymF3
ruN5PaZC0WNZYm6YJrRtbQVXOoH2
?很好,您仍然在运行!是的,我想让他们显示在地图上,但在获取子孩子(如管道工等)时,我似乎遇到了麻烦。您想查询哪些ID或名称?把那张照片换成更详细的。嗨,亚历克斯!请查看有关该问题的更新。我尝试了你所做的,但我似乎无法在我的地图上显示标记。请用另一张更详细的图片更改图片。展开
N2GCEIGYBaRiNrFPawklx1NymF3
运行5pazc0wnzym6yjrrtbqvxooh2
节点,以清楚地看到这些节点。你不能用它来实现这一点
g
l
不同,必须具有相同的结构。
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference availableWorkersRef = rootRef.child("AvailableWorkers");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot dSnapshot : dataSnapshot.getChildren()) {
            for(DataSnapshot ds : dSnapshot.getChildren()) {
                String name = ds.child("name").getValue(String.class);
                Log.d("TAG", name);
            }
        }
    }

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