Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/225.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Google在检索纬度和经度时映射NullPointerException_Java_Android_Google Maps_Nullpointerexception - Fatal编程技术网

Java Google在检索纬度和经度时映射NullPointerException

Java Google在检索纬度和经度时映射NullPointerException,java,android,google-maps,nullpointerexception,Java,Android,Google Maps,Nullpointerexception,我试图创建一个谷歌地图活动,获取用户的当前位置,并在用户的当前位置上放置pin。我已经用静态的纬度和经度值尝试了代码,地图工作正常。当我试图以编程方式获取LatLong值时,系统在第127行抛出了一个NullPointerException,其中包含代码double-longitude=location.getLongitude() 我做错了什么,如何纠正?提前感谢您的帮助 活动代码 @Override public void onMapReady(GoogleMap googleMap) {

我试图创建一个谷歌地图活动,获取用户的当前位置,并在用户的当前位置上放置pin。我已经用静态的纬度和经度值尝试了代码,地图工作正常。当我试图以编程方式获取LatLong值时,系统在第127行抛出了一个NullPointerException,其中包含代码
double-longitude=location.getLongitude()

我做错了什么,如何纠正?提前感谢您的帮助

活动代码

@Override
public void onMapReady(GoogleMap googleMap) {
    try {
        if (ContextCompat.checkSelfPermission(getActivity().getApplicationContext(), android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED ) {
            ActivityCompat.requestPermissions(getActivity(), new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION}, 101);
        }
    } catch (Exception e){
        e.printStackTrace();
    }
    LocationManager lm = (LocationManager)getActivity().getSystemService(Context.LOCATION_SERVICE);
    Location location = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
    double longitude = location.getLongitude();
    double latitude = location.getLatitude();
    gmap = googleMap;
    gmap.setMinZoomPreference(12);
    gmap.setIndoorEnabled(true);
    UiSettings uiSettings = gmap.getUiSettings();
    uiSettings.setIndoorLevelPickerEnabled(true);
    uiSettings.setMyLocationButtonEnabled(true);
    uiSettings.setMapToolbarEnabled(true);
    uiSettings.setCompassEnabled(true);
    uiSettings.setZoomControlsEnabled(true);
    LatLng ny = new LatLng(latitude, longitude);
    gmap.moveCamera(CameraUpdateFactory.newLatLng(ny));
}
Logcat

    Process: ke.co.mytech.mytech, PID: 8425
java.lang.NullPointerException: Attempt to invoke virtual method 'double android.location.Location.getLongitude()' on a null object reference
    at ke.co.mytech.mytech.HomeFragment.onMapReady(HomeFragment.java:127)
    at com.google.android.gms.maps.zzac.zza(Unknown Source)
    at com.google.android.gms.maps.internal.zzaq.dispatchTransaction(Unknown Source)
    at com.google.android.gms.internal.maps.zzb.onTransact(Unknown Source)
    at android.os.Binder.transact(Binder.java:392)
    at fg.b(:com.google.android.gms.dynamite_mapsdynamite@13280046@13.2.80 (040306-211705629):19)
    at com.google.android.gms.maps.internal.bg.a(:com.google.android.gms.dynamite_mapsdynamite@13280046@13.2.80 (040306-211705629):5)
    at com.google.maps.api.android.lib6.impl.be.run(:com.google.android.gms.dynamite_mapsdynamite@13280046@13.2.80 (040306-211705629):5)
    at android.os.Handler.handleCallback(Handler.java:815)
    at android.os.Handler.dispatchMessage(Handler.java:104)
    at android.os.Looper.loop(Looper.java:207)
    at android.app.ActivityThread.main(ActivityThread.java:5728)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:679)

一些可能有帮助的事情

首先,尝试使用FusedLocationProviderClient获取位置

FusedLocationProviderClient fusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(context);
    fusedLocationProviderClient.getLastLocation()
            .addOnSuccessListener(new OnSuccessListener<Location>() {
                @Override
                public void onSuccess(Location location) {
                    if(location != null) {
                        double latitude = location.getLatitude();
                        double longitude = location.getLongitude();

                        Log.i(TAG, "Latitude: " + latitude + " | Longitude: " + longitude);
                    } else {
                        Log.e(TAG, "Unable to retrieve location");
                    }
                }
            });
FusedLocationProviderClient FusedLocationProviderClient=LocationServices.getFusedLocationProviderClient(上下文);
fusedLocationProviderClient.getLastLocation()文件
.addOnSuccessListener(新的OnSuccessListener(){
@凌驾
成功时的公共无效(位置){
如果(位置!=null){
双纬度=location.getLatitude();
double longitude=location.getLongitude();
Log.i(标签“纬度:+纬度+”经度:+经度);
}否则{
Log.e(标记“无法检索位置”);
}
}
});

其次,我在emulator上测试时遇到了这个问题,它总是引发与您提到的相同的异常。我修复它的方法是进入模拟器上的谷歌地图应用程序,让它通过点击圆圈目标按钮来精确定位我的位置。我不知道它为什么起作用(我想是因为它保存了我以前无法保存的位置)。

找到了我做错了什么的答案