0

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

        }
    });
}
Frank van Puffelen
  • 565,676
  • 79
  • 828
  • 807
Rafael Campos
  • 49
  • 1
  • 5

0 Answers0