Noureddine Ouertani
Noureddine Ouertani

Reputation: 324

com.google.android.gms.location.LocationListener cannot be converted to android.location.LocationListener

I get the following error

Error:(197, 28) error: no suitable method found for requestLocationUpdates    (String,long,float,com.google.android.gms.location.LocationListener) method LocationManager.requestLocationUpdates (String,long,float,android.location.LocationListener) is not applicable
(argument mismatch; com.google.android.gms.location.LocationListener cannot be converted to android.location.LocationListener)
method LocationManager.requestLocationUpdates(String,long,float,PendingIntent) is not applicable
(argument mismatch; com.google.android.gms.location.LocationListener cannot be converted to PendingIntent)

method LocationManager.requestLocationUpdates(long,float,Criteria,PendingIntent) is not applicable
(argument mismatch; String cannot be converted to long)

when trying to run my Code although this line is underlined with red in Android Studio

LocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,LOCATION_REFRESH_TIME, LOCATION_REFRESH_DISTANCE, LocationListener);

I still did't find out where the mismatch comes from and would be thankful for any hints or help

This is my Location Listener:

private final LocationListener LocationListener = new LocationListener() {
        @Override
        public void onLocationChanged(final Location location) {
            updateLocation(location);
        }

it calls the following updateLocation:

 protected void updateLocation(Location location) {

      if (location != null && gpsFix == true) {
          addPoint(location);

          if (previousLocation != null)
              distanceTraveled += location.distanceTo(previousLocation);
      }
      previousLocation = location;
  }

which calls addPoint

  public void addPoint(Location location) {
      locations.add(location);
  }

Locations is an ArrayList of Location-objects. Apart from that I have these declarations:

 float LOCATION_REFRESH_DISTANCE = 1;
 long LOCATION_REFRESH_TIME = 100;

EDIT: When I try this

LocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,LOCATION_REFRESH_TIME, LOCATION_REFRESH_DISTANCE, (android.location.LocationListener)LocationListener);

I see the following: Non-static method 'requestLocationUpdates (...)' cannot be referenced from a static context.

And These are my Imports:

import android.content.Context;
import android.content.pm.PackageManager;
import android.graphics.Color;
import android.graphics.Paint;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationManager;
import android.os.Bundle;
import android.os.PowerManager;
import android.support.v4.app.ActivityCompat;
import android.support.v4.app.FragmentActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.FrameLayout;
import android.location.LocationListener;
import com.google.android.gms.appindexing.AppIndex;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.MapView;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;
import com.google.android.gms.maps.model.PolylineOptions;
import java.util.ArrayList;
import java.util.List;

Upvotes: 1

Views: 3886

Answers (1)

Noureddine Ouertani
Noureddine Ouertani

Reputation: 324

SOLUTION

if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED){
        float LOCATION_REFRESH_DISTANCE = 1;
        long LOCATION_REFRESH_TIME = 100;
        mlocationListener = new LocationListener() {
            @Override
            public void onLocationChanged(Location location) {

                updateLocation(location);
            }

            @Override
            public void onStatusChanged(String s, int i, Bundle bundle) {

            }

            @Override
            public void onProviderEnabled(String s) {

            }

            @Override
            public void onProviderDisabled(String s) {

            }
        };

        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,LOCATION_REFRESH_TIME, LOCATION_REFRESH_DISTANCE, mlocationListener);
    }

I had a capital L in LocationManager. That´s why I was not accessing the Object locationManager (with a small l). That's all!

The method LocationManager.requestLocationUpdates -with capital L- is a static method and belongs to a class (to a type and not a to an object) and has no relation to any object that represents the class or in ther words has no relation to any object from the type LocationManager

Upvotes: 1

Related Questions