Необходимо извлечь Latitude
и Longitude
для каждого указанного события c из Firebase, где пользователь при создании события также выбирает местоположение события (Latitude
и Longitude
), устанавливая маркер на определенное значение c расположение.
Проблема, с которой я столкнулся, заключается в том, что последнее сохраненное событие переопределяет все другие существующие местоположения событий, и поэтому, когда вы нажимаете TextView
, вы попадаете на GoogleMaps
, чтобы показать вам, где будет происходить событие. отображается только сохраненное местоположение последнего события. Но очевидно, что каждое событие имеет свое собственное указанное c местоположение.
Например, если я создаю три события и их местоположения - Рим, Берлин и Москва, единственным маркером, который будет создан на GoogleMap
, будет событие в Москве, потому что это было последнее сохраненное местоположение.
Я бы хотел, чтобы второй пользователь нажимал на TextView
, используя каждый спецификационный номер события c postid
, чтобы это событие было найдено в базе данных и чтобы его специфические c координаты отображались на карте. Может кто-нибудь, пожалуйста, помогите мне достичь этого? Я пытался достичь этого с помощью datasnapshot
, но я не смог найти другие места проведения мероприятий. Я всегда просто сохраняю местоположение последнего события для всех сообщений. Есть ли лучший способ сделать это, чем datasnapshot
?
Изображение, показанное ниже, поможет понять, как организована моя структура данных.
Структура данных Firebase
MapsActivityUser. java
public class MapsActivityUser extends FragmentActivity implements OnMapReadyCallback {
private GoogleMap map;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_maps_user);
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
}
@Override
public void onMapReady(GoogleMap googleMap) {
map = googleMap;
final DatabaseReference reference = FirebaseDatabase.getInstance().getReference("Posts");
reference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
Post post = snapshot.getValue(Post.class);
if (post != null) {
double latitude = post.getLocation().getLatitude();
double longitude = post.getLocation().getLongitude();
LatLng location = new LatLng(latitude, longitude);
map.addMarker(new MarkerOptions().position(location).title("Event location"));
map.moveCamera(CameraUpdateFactory.newLatLngZoom(location, 10));
} else {
Toast.makeText(MapsActivityUser.this, "Event doesn't have location on Map", Toast.LENGTH_SHORT).show();
}
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
}