Предотвращение дублирования маркера API Карт Google при использовании ValueEventListener Firebase - PullRequest
0 голосов
/ 24 апреля 2019

Я пытаюсь сделать маркер в своем приложении, используя API Google Maps, и я получил местоположение от моей RLTB Firebase. Расположение всегда меняется, поэтому я использовал ValueEventListener.

Я пытался установить маркер за пределами ValueEvent, но он не работает должным образом.

getDataNewLoc = FirebaseDatabase.getInstance().getReference().child("Location").child(id_diriku);
        getDataNewLoc.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                Double new_lat = (Double) dataSnapshot.child("l").child("0").getValue();
                Double new_long = (Double) dataSnapshot.child("l").child("1").getValue();

                LatLng diriku = new LatLng(new_lat, new_long);

                mDiriku = mMap.addMarker(new MarkerOptions()
                        .title("Diriku")
                        .position(diriku)
                        .icon(BitmapDescriptorFactory.fromResource(R.drawable.ic_forme))
                );
                mDiriku.setTag(0);
                mMap.animateCamera( CameraUpdateFactory.newLatLngZoom(diriku, 19.0f ) );
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });

Как я мог предотвратить подобные вещи?

Ответы [ 2 ]

0 голосов
/ 24 апреля 2019

Напишите следующую строку вверху, внутри метода onDataChange

mMap.clear()
0 голосов
/ 24 апреля 2019

Если вы хотите получить информацию о местоположении из базы данных только один раз, используйте addListenerForSingleValueEvent.

Итак:

getDataNewLoc.addListenerForSingleValueEvent(new ValueEventListener() {
  ...
...