SensorManager, if и else одного и того же условия выполняются одновременно

Пока я отлаживал код, размещенный ниже, я решил разместить Toast в теле ifзаявление и в теле else заявление, чтобы я мог видеть, откуда исходит ошибка. Когда я запустил приложение, я нашел оба Toasts выполнены. изначально Toast в пределах if оператор показывает, и через несколько секунд дисплей переключается на Toast в пределах else заявление, и они продолжают чередоваться. Я не знаю, как условие оценивается как истинное и ложное одновременно. Пожалуйста, предоставьте логическое объяснение и предложения для решения этой проблемы.

JavaCode:

public void onSensorChanged(SensorEvent event) {
    // TODO Auto-generated method stub
    switch (event.sensor.getType()) {
    case Sensor.TYPE_ACCELEROMETER:
        accelerometerValues = event.values.clone();
        tvAcc_XReading.setText(Float.toString(accelerometerValues[0]));
        tvAcc_YReading.setText(Float.toString(accelerometerValues[1]));
        tvAcc_ZReading.setText(Float.toString(accelerometerValues[2]));
    case Sensor.TYPE_MAGNETIC_FIELD:
        magnetometerValues = event.values.clone();
        tvMagneto_XReading.setText(Float.toString(magnetometerValues[0]));
        tvMagneto_YReading.setText(Float.toString(magnetometerValues[1]));
        tvMagneto_ZReading.setText(Float.toString(magnetometerValues[2]));
    }
    if (accelerometerValues != null && magnetometerValues != null) {
        float [] matrixR = new float[9];
        float [] matrixI = new float[9];
        boolean success = SensorManager.getRotationMatrix(matrixR, matrixI, accelerometerValues, 
                magnetometerValues);
        if (success) {
            Toast.makeText(getApplicationContext(), "SUCCESS", Toast.LENGTH_LONG).show();
            float [] orientationMatrix = new float[3];
            SensorManager.getOrientation(matrixR, orientationMatrix);
            tvAzimuthReading.setText(Float.toString(orientationMatrix[0]));
            tvPitchReading.setText(Float.toString(orientationMatrix[1]));
            tvRollReading.setText(Float.toString(orientationMatrix[2]));
        } else {
            Toast.makeText(getApplicationContext(), "No Rmatrix", Toast.LENGTH_LONG).show();
        }
    }

1 ответ

Попробуйте добавить заявление о прерывании в ваши дела, иначе оно провалится.

switch (event.sensor.getType()) {
    case Sensor.TYPE_ACCELEROMETER:
        accelerometerValues = event.values.clone();
        tvAcc_XReading.setText(Float.toString(accelerometerValues[0]));
        tvAcc_YReading.setText(Float.toString(accelerometerValues[1]));
        tvAcc_ZReading.setText(Float.toString(accelerometerValues[2]));
        break;
    case Sensor.TYPE_MAGNETIC_FIELD:
        magnetometerValues = event.values.clone();
        tvMagneto_XReading.setText(Float.toString(magnetometerValues[0]));
        tvMagneto_YReading.setText(Float.toString(magnetometerValues[1]));
        tvMagneto_ZReading.setText(Float.toString(magnetometerValues[2]));
        break;
    }
Другие вопросы по тегам