错误locationManager.getLastKnownLocation

时间:2017-08-20 13:22:48

标签: android haversine

我遵循有关半正式公式的教程

这是我在MainAcitvity中的函数lokasi()

 private void lokasi(){
    location = locationManager.getLastKnownLocation(provider);
    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) !=
            PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this,
            Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
        return;
    }

    // permintaan update lokasi device dalam waktu 10 detik
    locationManager.requestLocationUpdates(provider, 10000, 1, this);

    if(location!=null){
        onLocationChanged(location);
        callListVolley(latitude, longitude);
    }else{
        Toast.makeText(getBaseContext(), "Lokasi device pengguna tidak ditemukan.\nMohon hidupkan GPS.",
                Toast.LENGTH_LONG).show();
        callListVolley(-6.894796, 110.638413);
    }
}

所以当我跑,然后出现这个错误

FATAL EXCEPTION: main
                                                                         Process: com.example.invader.haversine, PID: 5913
                                                                         java.lang.IllegalArgumentException: invalid provider: null
                                                                             at android.location.LocationManager.checkProvider(LocationManager.java:1704)
                                                                             at android.location.LocationManager.getLastKnownLocation(LocationManager.java:1194)
                                                                             **at com.example.invader.haversine.MainActivity.lokasi(MainActivity.java:84)
                                                                             at com.example.invader.haversine.MainActivity.access$000(MainActivity.java:36)
                                                                             at com.example.invader.haversine.MainActivity$1.run(MainActivity.java:73)**

所以当我在logcat中检查时错误是在函数的开头,但我不知道该怎么办

1 个答案:

答案 0 :(得分:1)

首先,您应该在请求位置之前检查权限。 其次,您应检查提供商是否存在以及是否已启用此类提供商。

if(locationManager.getAllProviders().contains(LocationManager.GPS_PROVIDER) && locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)){
   provider = LocationManager.GPS_PROVIDER;
}

例如,如果您想使用GPS_PROVIDER