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