【问题标题】:Android - java.lang.NullPointerException - Google Maps [duplicate]Android - java.lang.NullPointerException - Google 地图 [重复]
【发布时间】:2018-03-20 14:29:52
【问题描述】:

我尝试显示用户的纬度,但出现错误

java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“double android.location.Location.getLatitude()”。

GPS 激活良好,是“最佳供应商”。

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

}

【问题讨论】:

标签: java android


【解决方案1】:

您正在使用可以返回 null 的 getLastKnownLocation()。请参阅此 answer 以更好地处理最后一个已知位置

您也可以参考Location API documentation 来使用getLastLocation,因此如果找不到位置,则很少会返回null

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-11
    • 2018-12-11
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多