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()));
}