1

Я разрабатываю приложение для Android, где некоторые пользователи открывают одно и то же действие со своих устройств. В этом действии есть карта, и, когда пользователи открывают эту активность со своих устройств, их координаты местоположения извлекаются из Firebase, и маркер, основанный на этих координатах, отображается на карте.Перемещайте все маркеры на карте в их обновленное/новое текущее местоположение периодически, когда пользователи перемещаются.

Вот мой код:

acceptingUserReference.child(requestID).child(key).addListenerForSingleValueEvent(new ValueEventListener() { 
           @Override 
           public void onDataChange(DataSnapshot dataSnapshot) { 

            if (dataSnapshot.getValue() != null) { 
              final Map<String, String> newAcceptedUser = (Map<String, String>) dataSnapshot.getValue(); 

              nameOfP.add(newAcceptedUser.get("pName"));      
              cLatP.add(newAcceptedUser.get("currentLat").trim()); 
              cLngP.add(newAcceptedUser.get("currentLng").trim()); 

              addMarkers(); 

              //Check map is loaded 
              mMap.setOnMapLoadedCallback(new GoogleMap.OnMapLoadedCallback() { 
               @Override 
               public void onMapLoaded() { 
                mMap.getUiSettings().setZoomControlsEnabled(true); 
                mMap.getUiSettings().setMapToolbarEnabled(true); 
                mMap.setMapType(GoogleMap.MAP_TYPE_SATELLITE); 
                mMap.setMaxZoomPreference(19.0f); mMap.setMyLocationEnabled(true); 

               } 
              }); 
           @Override 
           public void onCancelled(DatabaseError databaseError) { 

           } 
          }); 

Вот addMarkers() метод:

public void addMarkers() { 
     mMap.clear(); 
     venueMarker = mMap.addMarker(new MarkerOptions().position(new LatLng(Double.parseDouble(venueLat), Double.parseDouble(venueLng))); 
     markersList.add(venueMarker); 
     for (int i = 0; i < nameOfP.size(); i++) { 
      p = mMap.addMarker(new MarkerOptions().position(new LatLng(Double.valueOf(cLatP.get(i)), Double.valueOf(cLngP.get(i)))).title(nameOfP.get(i).trim()).icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED))); 
      markersList.add(pMarker); 
     } 
} 

Вот onLocationChanged():

@Override 
public void onLocationChanged(Location location) { 
    mCurrentLocation = location; 
    currentLtAU = mCurrentLocation.getLatitude(); 
    currentLnAU = mCurrentLocation.getLongitude(); 
} 

Пользователи продолжает двигаться в направлении определенного места.

Что я хочу -, чтобы переместить соответствующие маркеры в новое место, когда пользователи перемещаются, чтобы каждый мог видеть, где каждый находится сейчас. Пожалуйста, помогите мне разобраться.

+0

Что такое pMarker? это не переменная, которую вы назначаете маркеру только p? Кроме того, вы получаете какие-либо ошибки, или это просто не работает? – Epicality

+0

Я бы предложил добавить маркеры на «hashmap» на основе «id» пользователей, а затем отредактировать сами маркеры, так как ваше приложение получает значения из Firebase, а не каждый раз создает новые. – Epicality

+0

Вызовите 'acceptingUserReference.child (requestID)' всякий раз, когда 'onLocationChanged()' и обновите свое местоположение до 'FireBase' –

ответ

0

Сохраните результат addMarker и позже вызовите setPosition на нем (результат addMarker).

+0

, пожалуйста, сделайте это более понятным .. –

+0

Что вы подразумеваете под этим? Пожалуйста, ответьте ... –

0

Кажется, что с вашим кодом нет ничего плохого. Я сожалею, что я не мог найти ничего плохого с ним, как это, но здесь это файл, который вы можете использовать в качестве ориентира, чтобы найти проблему:

http://pastebin.com/9qq484Fz

Я надеюсь, что вы решить эту проблему в ближайшее время! (Извиняюсь за грязный код, это довольно старый)

+0

спасибо за код, приятель. вы нашли другой способ сделать это, как вы просили здесь: http://stackoverflow.com/q/39778805/6144372 –

+0

что такое 'friendList' здесь в вашем коде? –

+0

и что такое 'mFriends'? –

0

1. Когда onLocationChanged называется означает пользователь перемещается на некоторое расстояние.

Обновление обновленного местоположения пользователя на Firebase в onLocationChanged, поэтому другой пользователь может найти ваше обновленное местоположение.

Примечание: используйте geofire для уточнения местоположения пользователя и ознакомьтесь с этим answer.

@Override 
public void onLocationChanged(Location location) { 
mCurrentLocation = location; 
currentLtAU = mCurrentLocation.getLatitude(); 
currentLnAU = mCurrentLocation.getLongitude(); 
} 

2. вызов acceptingUserReference.child(requestID) код, когда вы успешно обновить местоположение пользователя на Firebase

+0

Это то, о чем вы спрашиваете? –

+0

работал над другой проблемой ... извините за ответ так поздно ... вместо GeoFIre могу ли я просто сохранить сохранение обновленного местоположения (при изменении местоположения) вместе с другими данными пользователя, а затем продолжить вызов 'acceptingUserReference.child (requestID) 'изнутри' onLocationChanged() '?. –

+0

да, вы можете ... –