检索纬度和经度时,Google Maps NullPointerException

时间:2018-09-23 16:44:21

标签: java android google-maps nullpointerexception

am试图创建一个Google Maps活动,该活动获取用户的当前位置并在用户的当前位置放置图钉。我已经尝试使用具有静态纬度和经度值的代码,并且地图按预期工作。当我尝试以编程方式获取LatLong值时,系统在第127行抛出NullPointerException,其中包含代码XYZ

我在做什么错,我该如何纠正?预先感谢您的协助。

活动代码

double longitude = location.getLongitude();

Logcat

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

2 个答案:

答案 0 :(得分:1)

一些可能有用的东西。

一个,尝试使用 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");
                    }
                }
            });

第二,当我在模拟器上进行测试时遇到了这个问题,它总是引发与您提到的相同的异常。我要解决的问题是进入模拟器上的Google Maps应用程序,然后通过单击圆圈目标按钮让它确定我的位置。我不确定它为什么起作用(我认为是因为它保存了以前无法执行的位置)。

答案 1 :(得分:0)

得到我做错了in this question的答案