Retrieve location from Firebase and put marker on google map api for android

15,584

First : you nedd to change the structure to be like this :

 Data
  Location
    -Kidp45TdInOM3Bsyu2b
       latitude:19.772613777905196 
       longitude:-9.92741011083126
    -KidsmTExZY2KjnS7S-b
       latitude: 18.221073689785065
       longitude: -6.573890447616577
    -KidvmAgV0bm2uT_Pcdr
       latitude: 14.44608051870992
       longitude: -6.510856859385967

The way to do that is :

        mSaveButton.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View view){
                //change to refDatabase or mDatabase.child("Location")
                DatabaseReference newPost = refDatabase.push();
                //the push() command is already creating unique key
                newPost.setValue(latlng);

            }
        });

And the code for put marker to the map from your refDatabase is :

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

   ...

   refDatabase.addChildEventListener(new ChildEventListener() {
     @Override
     public void onChildAdded(DataSnapshot dataSnapshot, String prevChildKey) {
          LatLng newLocation = new LatLng(
                        dataSnapshot.child("latitude").getValue(Long.class),
                        dataSnapshot.child("longitude").getValue(Long.class)
                    );
          mMap.addMarker(new MarkerOptions()
              .position(newLocation)
              .title(dataSnapshot.getKey()));
     }

     @Override
     public void onChildChanged(DataSnapshot dataSnapshot, String prevChildKey) {}

     @Override
     public void onChildRemoved(DataSnapshot dataSnapshot) {}

     @Override
     public void onChildMoved(DataSnapshot dataSnapshot, String prevChildKey) {}

     @Override
     public void onCancelled(DatabaseError databaseError) {}
  });
}
Share:
15,584
Admin
Author by

Admin

Updated on June 11, 2022

Comments

  • Admin
    Admin almost 2 years

    I am trying to create app to store location on firebase when save button is pressed and retrieve locations from firebase and display all pins in the map. I have been able to save locations to firebase under Location child with latitude and longitude, but I have no idea how to get the values and pins. I tried to do it the way firebase has it on its manual but it didn't work. Can anyone help with the problem?

    This is my code so far:

    public class MapsActivity extends FragmentActivity implements 
    OnMapReadyCallback {
    private GoogleMap mMap;
    private final static int MY_PERMISSION_FINE_LOCATION = 101;
    private Button mSaveButton;
    private DatabaseReference mDatabase;
    private DatabaseReference refDatabase;
    
    @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);
        mSaveButton = (Button) findViewById(R.id.Savebtn);
        mDatabase = 
    FirebaseDatabase.getInstance().getReference().child("Navigation");
        refDatabase = 
    FirebaseDatabase.getInstance().getReference().child("Location");
     }
    @Override
    public void onMapReady(GoogleMap googleMap) {
        mMap = googleMap;
    
    
        mMap.setOnMapLongClickListener(new GoogleMap.OnMapLongClickListener() {
    
            @Override
            public void onMapLongClick(LatLng point) {
                // TODO Auto-generated method stub
    
                // added marker saved as marker and coordinates passed to latlng
                Marker marker = mMap.addMarker(new 
               MarkerOptions().position(point));
                final LatLng latlng = marker.getPosition();
    
                mSaveButton.setOnClickListener(new View.OnClickListener(){
                    @Override
                    public void onClick(View view){
                        DatabaseReference newPost = mDatabase.push();
                        newPost.child("Location").setValue(latlng);
    
                    }
                });
    
              }
           });
    
           if (ActivityCompat.checkSelfPermission(this, 
        Manifest.permission.ACCESS_FINE_LOCATION) ==
                 PackageManager.PERMISSION_GRANTED) {
            mMap.setMyLocationEnabled(true);
        } else {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                requestPermissions(new String[]
    {Manifest.permission.ACCESS_FINE_LOCATION}, MY_PERMISSION_FINE_LOCATION);
            }
    
        }
    
    
    }
    
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        switch (requestCode) {
            case MY_PERMISSION_FINE_LOCATION:
                if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) ==
                            PackageManager.PERMISSION_GRANTED) {
                        mMap.setMyLocationEnabled(true);
                    }
    
                }else {
                    Toast.makeText(getApplicationContext(), "This requires location permissions to be granted", Toast
                            .LENGTH_LONG).show();
                    finish();
                }
                break;
        }
      }
    }
    

    this is how the location been saved in firebase

    Data
      -Kidp45TdInOM3Bsyu2b
             Location
             latitude:19.772613777905196 
             longitude:-9.92741011083126
      -KidsmTExZY2KjnS7S-b
             Location
             latitude: 18.221073689785065
             longitude: -6.573890447616577
      -KidvmAgV0bm2uT_Pcdr
             Location
             latitude: 14.44608051870992
             longitude: -6.510856859385967