我需要 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(使用前将#替换为@)