基于sensordata更新Textview

时间:2013-05-05 13:10:44

标签: android textview android-sensors

我正在尝试更新基于sensorinput的textview - 更精确的音高。我没有问题获取传感器数据,将其转换为度数并在文本视图中显示它。 问题是,根据度数的不同,我不会显示不同的数字。我已经编写了一个if-else if语句并将其放在onsensorchanged中,但除了初始编号之外它没有更新。

     @Override


public void onSensorChanged(SensorEvent event) {

  switch(event.sensor.getType()){
  case Sensor.TYPE_ACCELEROMETER:
   for(int i =0; i < 3; i++){
    valuesAccelerometer[i] = event.values[i];
   }
   break;
  case Sensor.TYPE_MAGNETIC_FIELD:
   for(int i =0; i < 3; i++){
    valuesMagneticField[i] = event.values[i];
   }
   break;
  }

  boolean success = SensorManager.getRotationMatrix(
       matrixR, 
       matrixI, 
       valuesAccelerometer, 
       valuesMagneticField);

  if(success){
   SensorManager.getOrientation(matrixR, matrixValues);

// Float to double
   double pitch = Math.toDegrees(matrixValues[1]);
// 1 decimal
    pitch = Math.abs(round(pitch, 0));

//set textview vinkel to degrees
  vinkel.setText(String.valueOf(pitch));

// find tubesize from edittext
  String tubesizestring = tubesize.getText().toString();



  if(tubesizestring=="1000"){

      if(pitch>=0.6){
          kwh.setText("2,69");
      }else if(pitch>=1.0){
          kwh.setText("3,47");
      }else if(pitch>=2.0){
          kwh.setText("4,90");
      }else if(pitch>=5.0){
          kwh.setText("7,75");
      }else if(pitch>=10.0){
          kwh.setText("10,96");
      }else if(pitch>=20.0){
          kwh.setText("15,50");
      }else if(pitch>=30.0){
          kwh.setText("18,99");
      }else{
          kwh.setText("more than 30 degrees");

      }
  }
  }

我希望我很清楚自己要做什么。其他请问

希望有人能指出我正确的方向

1 个答案:

答案 0 :(得分:0)

它不起作用,因为你的逻辑基本上是有缺陷的。我们假设音高在25左右。它大于0.61.0等等。所以很明显只会看到第一个if语句,因为其他语句是else if语句。要使其工作,请更改语句的顺序。

    if(pitch>=30.0){
      kwh.setText("18,99");
  }else if(pitch>=20.0){
      kwh.setText("15,50");
  }else if(pitch>=10.0){
      kwh.setText("10,96");
  }else if(pitch>=5.0){
      kwh.setText("7,75");
  }else if(pitch>=2.0){
      kwh.setText("4,90");
  }
else if(pitch>=1.0){
      kwh.setText("3,47");
  }
  else if(pitch>=0.6){
      kwh.setText("2,69");
  }eelse{
      kwh.setText("more than 30 degrees");