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));
}
答案 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的答案