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

2023-12-28

我需要 Firebase 数据库方面的帮助。

我想做的是显示所有用户可用工人 (例如,N2GCEIGYBaRiNrFPawklx1NymF3、RUN5PaZC0WNZYm6YJrRtbQVXOoH2)在我的地图上。

这是 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) {

        }
    });
}

任何帮助将不胜感激。先感谢您! :)


EDITED

DatabaseReference dbWorkerLocation = FirebaseDatabase.getInstance().getReference(Common.available_workers_table);

这是我需要(再次)获取子当前用户 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);

输出将是所有可用作品的名称。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

根据子 Firebase Android 的值在位置更改时更新标记 的相关文章

随机推荐