2013-05-05 83 views
0

我試圖更新基於sensorinput的textview - 更精確的音調。我沒有問題獲取傳感器數據,將其轉換爲度數並將其顯示在文本視圖中。 問題是,我不會顯示不同的數字,基於度數的音高。我已經寫了一個if-else if語句並將它放在onsensorchanged中,但除了初始數字之外它不更新。更新基於sensordata的Textview

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

     } 
    } 
    } 

我希望我很清楚自己想要做什麼。 Othervise請向

希望有人可以點我在正確的方向

+0

Thx爲您的兩個意見。 這是顯而易見的我猜:$ – Androisten 2013-05-05 13:54:12

回答

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