I'm trying to display the latest details of the data that was added into a customer info window of a map marker, however, it's still showing previous details from another user first, then the latest one after I clicked the marker, how should I solve this?
Here is my database schema for the user details, I'm using the "userTimestamp" to sort the details in each of the UUID children:
{
"Blocked Users" : {
"RCX2HZXIwlSmMHFgDytf1DgZBgi2" : 0,
"vqP3H4maEfQxCBHEWqsH9q4O1M52" : 0
},
"User Location" : {
"RCX2HZXIwlSmMHFgDytf1DgZBgi2" : {
"latitude" : 15.506605,
"longitude" : 120.86838,
"timestamp" : 1635665800128
},
"vqP3H4maEfQxCBHEWqsH9q4O1M52" : {
"latitude" : 15.44318,
"longitude" : 120.7148767,
"timestamp" : 1635666561999
}
},
"Users" : {
"RCX2HZXIwlSmMHFgDytf1DgZBgi2" : {
"Alert Level" : "Medium",
"Emergency Type" : "Emergency",
"address" : "Lapaz Tarlac",
"emergencyNum" : "098345786348",
"lName" : "Darwin Campos",
"name" : "Rafael Campos",
"phoneNum" : "091232343454",
"userTimestamp" : 1635665781648
},
"vqP3H4maEfQxCBHEWqsH9q4O1M52" : {
"Alert Level" : "High",
"Emergency Type" : "Man-Made Disaster",
"address" : "Tarlac Lapaz",
"emergencyNum" : "0923432425245",
"lName" : "Campos Darwin",
"name" : "Campos Rafael",
"phoneNum" : "091231232345",
"userTimestamp" : 1635666543568
}
}
}
And here is my onMapReady():
@Override
public void onMapReady(@NonNull GoogleMap googleMap) {
mMap = googleMap;
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference locationRef = rootRef.child("User Location");
locationRef.orderByChild("timestamp").addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(@NonNull DataSnapshot snapshot, @Nullable String previousChildName) {
LocationSend send = snapshot.getValue(LocationSend.class);
LatLng location = new LatLng(send.getLatitude(), send.getLongitude());
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference uidRef = rootRef.child("Users");
uidRef.orderByChild("userTimestamp").addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(@NonNull DataSnapshot snapshot, @Nullable String previousChildName) {
String name = snapshot.child("name").getValue(String.class);
String emergencyType = snapshot.child("Emergency Type").getValue(String.class);
String alertLevel = snapshot.child("Alert Level").getValue(String.class);
mMap.addMarker(new MarkerOptions().position(location)
.title(name)
.snippet(emergencyType + alertLevel)
);
mMap.moveCamera(CameraUpdateFactory.newLatLng(location));
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(location, 14F));
mMap.setInfoWindowAdapter(new InfoWindowAdapter(Retrieve.this));
Log.d("TAG", "latitude, longitude");
}
@Override
public void onChildChanged(@NonNull DataSnapshot snapshot, @Nullable String previousChildName) {
String name = snapshot.child("lName").getValue(String.class);
String emergencyType = snapshot.child("Emergency Type").getValue(String.class);
String alertLevel = snapshot.child("Alert Level").getValue(String.class);
mMap.addMarker(new MarkerOptions().position(location)
.title(name)
.snippet(emergencyType + "/" + alertLevel)
);
mMap.moveCamera(CameraUpdateFactory.newLatLng(location));
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(location, 14F));
mMap.setInfoWindowAdapter(new InfoWindowAdapter(Retrieve.this));
Log.d("TAG", "latitude, longitude");
}
@Override
public void onChildRemoved(@NonNull DataSnapshot snapshot) {
}
@Override
public void onChildMoved(@NonNull DataSnapshot snapshot, @Nullable String previousChildName) {
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
notification();
}
@Override
public void onChildChanged(@NonNull DataSnapshot snapshot, @Nullable String previousChildName) {
LocationSend send = snapshot.getValue(LocationSend.class);
notification();
}
@Override
public void onChildRemoved(@NonNull DataSnapshot snapshot) {
}
@Override
public void onChildMoved(@NonNull DataSnapshot snapshot, @Nullable String previousChildName) {
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
}