0

I try to display the user's latitude but I get an error

java.lang.NullPointerException: Attempt to invoke virtual method 'double android.location.Location.getLatitude()' on a null object reference.

GPS is well activated and is the "bestprovider".

public void getUserPosition()
{
    /**************Vérification des droits localisation******************/
    Context mainContext = getActivity().getApplicationContext();

    int permissionCheck = ContextCompat.checkSelfPermission(mainContext,
            Manifest.permission.ACCESS_FINE_LOCATION);

    Log.e("Droits Position : ", String.valueOf(permissionCheck));

    if (ContextCompat.checkSelfPermission(mainContext,
            Manifest.permission.ACCESS_FINE_LOCATION)
            != PackageManager.PERMISSION_GRANTED)
    {

        if (ActivityCompat.shouldShowRequestPermissionRationale(this.getActivity(),
                Manifest.permission.ACCESS_FINE_LOCATION))
        {
            Log.e("LOCATION : ", "Localisation acceptée !");
        }
        else
        {
            Log.e("LOCATION : ", "Localisation refusée !");

            ActivityCompat.requestPermissions(this.getActivity(),
                    new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
                    REQUEST_LOCATION);
        }
    }

    permissionCheck = ContextCompat.checkSelfPermission(mainContext,
            Manifest.permission.WRITE_CALENDAR);
    Log.e("DROITS :", String.valueOf(permissionCheck));
    /*****************FIN vérification droits localisation************/

    LocationManager locationManager = (LocationManager) mainContext.getSystemService(Context.LOCATION_SERVICE);

    //On ajoute des critère pour trouver le meilleur provider (indicateur de position)
    Criteria critere = new Criteria();
    critere.setAccuracy(Criteria.ACCURACY_FINE);//On demande une position précise
    critere.setAltitudeRequired(false);         // Est-ce que le fournisseur doit être capable de donner une altitude ?
    critere.setBearingRequired(false);           // Est-ce que le fournisseur doit être capable de donner une direction ?
    critere.setCostAllowed(true);              // Est-ce que le fournisseur peut être payant ?
    critere.setPowerRequirement(Criteria.POWER_HIGH); //On accepte d'utiliser un provider a haute consommation électrique(GPS)
    critere.setSpeedRequired(false); // Est-ce que le fournisseur doit être capable de donner une vitesse ?


    List<String> providers = locationManager.getAllProviders(); //Liste des fournisseurs qui correspondent
    String bestProvider = locationManager.getBestProvider(critere, true); //Le provider qui répond le mieux aux critères

    if(bestProvider == null) //On affiche le nom du provider choisis
    {
        Log.e("Best Provider : ","NULL !");
    }
    else{
        Log.e("Best Provider : ", bestProvider);
    }

    Location positionNow = locationManager.getLastKnownLocation(bestProvider); //Objet location qui contient la position de l'utilisateur
    Log.e("Position user now", "Lat:"+String.valueOf(positionNow.getLatitude()));

}

ColdFire
  • 6,764
  • 6
  • 35
  • 51
DataCube
  • 107
  • 1
  • 1
  • 10

1 Answers1

0

You're using getLastKnownLocation() which can return null.. refer to this answer to better handle the last known location

You can also refer to the Location API documentation to use getLastLocation which accordingly may rarely return also null if no location is found

ColdFire
  • 6,764
  • 6
  • 35
  • 51