【发布时间】:2022-01-21 08:45:30
【问题描述】:
下面显示的代码是用于从 Realtime Firebase 检索多个用户位置并分配给地图上的标记的代码:
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
mMap.getUiSettings().setZoomControlsEnabled(true);
DatabaseReference db = FirebaseDatabase.getInstance().getReference();
DatabaseReference userLocationRef = db.child("User_Location");
db.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
userLocationRef.get().addOnCompleteListener(new OnCompleteListener<DataSnapshot>() {
@Override
public void onComplete(@NonNull Task<DataSnapshot> task) {
if (task.isSuccessful()) {
try {
for (DataSnapshot ds : task.getResult().getChildren()) {
String userID = String.valueOf(ds.child("userID").getValue());
String encryptedLatitude = ds.child("You").child("l").child("0").getValue(String.class);
String encryptedLongitude = ds.child("You").child("l").child("1").getValue(String.class);
Log.d("encryptedLocation", encryptedLatitude + ", " + encryptedLongitude); //Check the values
Log.d("userid", userID); //Check the values
//decrypt
LocationEncryption locationEncryption = new LocationEncryption();
String decryptedLatitude = null;
String decryptedLongitude = null;
decryptedLatitude = locationEncryption.decrypt(encryptedLatitude);
decryptedLongitude = locationEncryption.decrypt(encryptedLongitude);
Log.d("Decrypted", decryptedLatitude + ", " + decryptedLongitude); //Check the values
double lat = Double.valueOf(decryptedLatitude);
double lng = Double.valueOf(decryptedLongitude);
//Add location on Google Map
LatLng location = new LatLng(lat, lng);
if (hm.containsKey(userID)) {
hm.get(userID).remove();
}
currentLocationMarker = mMap.addMarker(new MarkerOptions().position(location).title(userID));
currentLocationMarker.showInfoWindow();
hm.put(userID, currentLocationMarker);
}
}
catch (Exception e){
e.printStackTrace();
}
} else {
Log.d("TAG", task.getException().getMessage()); //Don't ignore potential errors!
}
}
});
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
当我点击标记时,它只显示用户的用户 ID。我希望标记显示用户名和用户 ID。但问题是多个用户的名称都存储在 Firestore 中。
Firestore 的结构如下: 管理员详细信息和用户详细信息存储在同一集合“用户”中。 “isAdmin”和“isUser”字段是区分它们的方法。我只需要用户名,不需要管理员名称。
那么,如何从 Firestore 中检索多个用户的名称并将名称分配给地图上的正确标记。
【问题讨论】:
-
我不确定我是否理解。您正在使用代码从实时数据库中读取数据,而屏幕截图显示的是 Firestore 数据库。那么您使用的是哪个确切的数据库?
-
用户名和用户电子邮件存储在 Firestore 中,同时存储用户的位置。我用来从firebase检索数据的代码只是为了展示应用程序的概念,没有太大问题。
-
问题是如何从firestore中检索用户名并将它们分配给地图上的正确标记。现在,我只需在单击标记时显示用户 ID。希望你能明白我想说什么。谢谢
-
您正在从实时数据库获取
userID。请编辑您的问题并将您的数据库结构添加为 JSON 文件。您可以通过单击 Firebase Console 的溢出菜单 (⠇) 中的导出 JSON 来简单地获取它。 -
我已通过上传实时 Firebase 结构的图像来更新问题。我不确定如何将实时 firebase 结构的 JSON 文件上传到问题中。谢谢。
标签: java android firebase google-cloud-platform google-cloud-firestore