gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 01:03:24 24 4
gpt4 key购买 nike

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

我想做的是在我的 map 上显示来自 AvailableWorkers (例如,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) {

}
});
}

如有任何帮助,我们将不胜感激。先感谢您! :)


已编辑

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

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

关于android - 根据子 Firebase Android 的值在位置更改时更新标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49306983/

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