如何在 onSensorChanged 中使用 GoogleMap.addMarker?

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

            }

        }


    }


    }


梵蒂冈之花
浏览 105回答 2
2回答

慕运维8079593

通常,一旦您启动应用程序屏幕,onSenorChanged 就会触发。通过这种方式,在传感器值更改后,您尝试旋转地图对象上的标记,该标记将为空,因为它是异步调用。在调用“rotateMarker”方法之前进行空检查。例子:If (mMap != null) {  // do rotate Map marker}注意:即使非常微小的变化,传感器值也会发生变化。只是为了提高性能,用 + 或 - 5 校准您的传感器值。希望这些信息有帮助!

撒科打诨

我解决它。解决方案是避免在 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。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java