Я хочу добавить значение Latlng в Google Maps из Firebase, но получаю ошибки - PullRequest
0 голосов
/ 11 сентября 2018

Я хочу, чтобы это было решено, пожалуйста, помогите мне решить эту проблему.Я использую Resburrpi-3 для данных о местоположении, широта и долгота загружаются на базе FireBase, и теперь я хочу получить долготу и широту с помощью FireBase на картах Google на эталоне latlong.

private DatabaseReference mReference;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_maps);
    // Obtain the SupportMapFragment and get notified when the map is ready to be used.
    SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
            .findFragmentById(R.id.map);
    mapFragment.getMapAsync(this);



    mReference = FirebaseDatabase.getInstance().getReference();
    DatabaseReference usersRef = mReference.child("Tezgam");
    usersRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            // This method is called once with the initial value and again
            // whenever data at this location is updated.

            for (DataSnapshot snapm: dataSnapshot.getChildren()) {

                latitude = snapm.child("lat").getValue(Long.class);
                longitude = snapm.child("long").getValue(Long.class);
                Speed = snapm.child("speed").getValue(String.class);
            }
        }

        @Override
        public void onCancelled(DatabaseError error) {
            // Failed to read value

        }
    });


}

@Override
public void onMapReady(GoogleMap googleMap) {
    mMap = googleMap;

    // Add a marker in Sydney and move the camera
    LatLng sydney = new LatLng(latitude, longitude);
    mMap.addMarker(new MarkerOptions().position(sydney).title("Tezgam\n Current location"));
    mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));
}`

1 Ответ

0 голосов
/ 11 сентября 2018

Ваш метод onMapReady(), вероятно, запускается до того, как данные станут доступны в методе onDataChanged().Я предполагаю, что ошибка, которую вы получаете, является чем-то вроде "широта" и "долгота", являются нулевыми (предположение, потому что операция не показывала, как переменные были объявлены).Это условие гонки. Один метод завершен, прежде чем другой метод сможет предоставить данные.Вы должны учесть недостающие данные.

Поэтому измените код onMapReady() следующим образом:

@Override
public void onMapReady(GoogleMap googleMap) {
    mMap = googleMap;

    updateMapLocation();
}

и измените код снимка на:

@Override
public void onDataChange(DataSnapshot dataSnapshot) {
    // This method is called once with the initial value and again
    // whenever data at this location is updated.

    for (DataSnapshot snapm: dataSnapshot.getChildren()) {
        latitude = snapm.child("lat").getValue(Long.class);
        longitude = snapm.child("long").getValue(Long.class);
        Speed = snapm.child("speed").getValue(String.class);

    updateMapLocation();
    }
}

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

private void updateMapLocation(){
    if(latitude == null || longitude == null){
        Log.e("updateMapLocation", "latitude or longitude is null")
    }
    else{
        LatLng sydney = new LatLng(latitude, longitude);
        mMap.addMarker(new MarkerOptions().position(sydney).title("Tezgam\n Current location"));
        mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...