onSensorChanged调用我的方法时如何旋转标记?我尝试了这段代码,但我得到了 NullPointerException。我声明mMap为全局变量并将其加载到 onMapReady 中。我想在我的onSensorChanged方法中使用它。我该如何解决?我收到了这个错误:java.lang.NullPointerException:尝试调用虚拟方法 'com.google.android.gms.maps.model.Marker com.google.android.gms.maps.GoogleMap.addMarker(com.google.android.gms.maps.model .MarkerOptions)' 在空对象引用上 @Override public void onMapReady(GoogleMap googleMap) { mMap = googleMap; mMap.getUiSettings().setZoomControlsEnabled(true); latLng_dest = getIntent().getExtras().getParcelable("latLng_dest"); Log.d("LatLng_dest : ", latLng_dest.toString()); if (ActivityCompat.checkSelfPermission(this,Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, LOCATION_REQUEST); return; } mMap.setMyLocationEnabled(true); mMap.getUiSettings().setMyLocationButtonEnabled(false); // Call our direction function getDeviceLocation(); } @Override public void onSensorChanged(SensorEvent event) { if (event.sensor == mRotationSensor) { if (event.values.length > 4) { float[] truncatedRotationVector = new float[4]; System.arraycopy(event.values, 0, truncatedRotationVector, 0, 4); updateSensor(truncatedRotationVector); } else { updateSensor(event.values); } } } }
2 回答
慕运维8079593
TA贡献1876条经验 获得超5个赞
通常,一旦您启动应用程序屏幕,onSenorChanged 就会触发。
通过这种方式,在传感器值更改后,您尝试旋转地图对象上的标记,该标记将为空,因为它是异步调用。
在调用“rotateMarker”方法之前进行空检查。
例子:
If (mMap != null) {
// do rotate Map marker
}
注意:即使非常微小的变化,传感器值也会发生变化。只是为了提高性能,用 + 或 - 5 校准您的传感器值。
希望这些信息有帮助!
撒科打诨
TA贡献1934条经验 获得超2个赞
我解决它。解决方案是避免在 OnMapReady 之前调用 mMap.addMarker。我首先使用它来避免 mMap 上的 null 以及标记位置上为 null 的 addMarker 错误。
if (save) {
temp_marker.remove();
temp_marker = mMap.addMarker(markerOptions.rotation(azimuth));
}
在我的 updateSensor 中,并在我的 getDeviceLocation 中添加了第一个位置标记后添加了这个:
save = true;
将保存定义为全局并初始化为假。
if (mMap != null)
没用。这就是为什么我很困惑。我没有注意到它在相同的语法中是双 nullPointerException。
添加回答
举报
0/150
提交
取消