Java – No method found for requestLocationUpdates

No method found for requestLocationUpdates… here is a solution to the problem.

No method found for requestLocationUpdates

This is my MainActivity .java:

import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.location.Location;
import android.location.LocationManager;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;

import com.google.android.gms.location.LocationListener;
import com.google.android.gms.location.LocationRequest;

public class MainActivity extends Activity {

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        LocationManager locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
        LocationListener locationListener = new GetCurrentLocation();
        locationManager.requestLocationUpdates(
                LocationManager.GPS_PROVIDER, 5000, 10, locationListener);
}

Here is my GetCurrentLocation .java:

import android.app.Activity;
import android.content.Context;
import android.location.Address;
import android.location.Geocoder;
import android.location.Location;
import android.location.LocationManager;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Toast;

import com.google.android.gms.location.LocationListener;

import java.io.IOException;
import java.util.List;
import java.util.Locale;

public class GetCurrentLocation extends Activity implements LocationListener {
    String longitude;
    String latitude;
    String cityName;

public void onLocationChanged(Location loc) {
        editLocation.setText("");
        pb.setVisibility(View.INVISIBLE);
        Toast.makeText(
                getBaseContext(),
                "Location changed: Lat: " + loc.getLatitude() + " Lng: "
                        + loc.getLongitude(), Toast.LENGTH_SHORT).show();
        longitude = "Longitude: " + loc.getLongitude();
        Log.v(TAG, longitude);
        latitude = "Latitude: " + loc.getLatitude();
        Log.v(TAG, latitude);

/*------- To get city name from coordinates -------- */
        String cityName = null;
        Geocoder gcd = new Geocoder(getBaseContext(), Locale.getDefault());
        List<Address> addresses;
        try {
            addresses = gcd.getFromLocation(loc.getLatitude(),
                    loc.getLongitude(), 1);
            if (addresses.size() > 0)
                System.out.println(addresses.get(0).getLocality());
            cityName = addresses.get(0).getLocality();
        }
        catch (IOException e) {
            e.printStackTrace();
        }

editLocation.setText(s);
    }

@Override
    public void onProviderDisabled(String provider) {}

@Override
    public void onProviderEnabled(String provider) {}

@Override
    public void onStatusChanged(String provider, int status, Bundle extras) {}

}

The error I get is:

Error:(40, 24) error: no suitable method found for requestLocationUpdates(String,int,int,com.google.android.gms.location.LocationListener)
method LocationManager.requestLocationUpdates(long,float,Criteria,PendingIntent) is not applicable
(actual argument String cannot be converted to long by method invocation conversion)
method LocationManager.requestLocationUpdates(String,long,float,PendingIntent) is not applicable
(actual argument com.google.android.gms.location.LocationListener cannot be converted to PendingIntent by method invocation conversion)
method LocationManager.requestLocationUpdates(long,float,Criteria,android.location.LocationListener,Looper) is not applicable
(actual and formal argument lists differ in length)
method LocationManager.requestLocationUpdates(String,long,float,android.location.LocationListener,Looper) is not applicable
(actual and formal argument lists differ in length)
method LocationManager.requestLocationUpdates(String,long,float,android.location.LocationListener) is not applicable
(actual argument com.google.android.gms.location.LocationListener cannot be converted to android.location.LocationListener by method invocation conversion)

I

don’t know anything about which part of the code should be fixed, I tried googling but didn’t find a relevant solution.

Solution

You used the wrong LocationListener class. You need to replace it:

import com.google.android.gms.location.LocationListener;

With this:

import android.location.LocationListener;

The com.google.android.gms.location content is used with the FusedLocationProviderApi as part of Google Play Services.

Standard Android location information is in android.location.

In addition, you have the GetCurrentLocation extends activity. But it’s not really an activity. You need to remove the extends activity clause. This causes problems because you are calling getBaseContext() in some method of the class. To solve this problem, have GetCurrentLocation's constructor take the Context parameter and save it in a private member variable. Then use it when you need Context instead of calling getBaseContext().

In MainActivity, you can do this when you create a new GetCurrentLocation:

LocationListener locationListener = new GetCurrentLocation(this);

Pass this as a Context parameter (Activity Extension Context).

Related Problems and Solutions