実現したいこと
センサーの値から画面に映し出す文字列を決定し、表示したいです。その文字列であっているのか○×で回答してもらうようになってます。
困っていること
センサーの値がころころ変わってしまい画面に表示された文字列が一緒になってころころ変わってしまいます。
試したこと
HandlerやTimerなどを使用したのですが使い方が間違っているのかうまくいきません。使い方等初心者でもわかるよう明記していただけると大変助かります。
実際のコード
Java
1package com.example.g1323073.decisionapp; 2 3import android.hardware.Sensor; 4import android.hardware.SensorEvent; 5import android.hardware.SensorEventListener; 6import android.hardware.SensorManager; 7import android.os.Environment; 8import android.os.Message; 9import android.support.v7.app.AppCompatActivity; 10import android.os.Bundle; 11import android.view.View; 12import android.widget.Button; 13import android.widget.TextView; 14 15import org.w3c.dom.Text; 16 17import java.io.BufferedWriter; 18import java.io.FileNotFoundException; 19import java.io.FileOutputStream; 20import java.io.IOException; 21import java.io.OutputStreamWriter; 22import java.io.UnsupportedEncodingException; 23import java.util.Timer; 24import java.util.TimerTask; 25import java.util.logging.Handler; 26 27public class MainActivity extends AppCompatActivity implements SensorEventListener{ 28 29 private String sdPath = Environment.getExternalStorageDirectory() + "/sdcard/ans.csv"; 30 31 private SensorManager sensorManager; 32 private float[] aValues = new float[3]; 33 private float[] gValues = new float[3]; 34 public int button_flag = -1; 35 Sensor Accele; 36 Sensor Gyro; 37 TextView xdate; 38 String ydate; 39 40 @Override 41 protected void onCreate(Bundle savedInstanceState) { 42 super.onCreate(savedInstanceState); 43 setContentView(R.layout.activity_main); 44 //センサーマネージャーを取得 45 sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); 46 //ボタン 47 Button Correct = (Button) findViewById(R.id.maru); 48 Button Mistake = (Button) findViewById(R.id.batu); 49 Button Answer = (Button)findViewById(R.id.answer) ; 50 //提示情報 51 xdate = (TextView)findViewById(R.id.date); 52 53 //正解 54 Correct.setOnClickListener(new View.OnClickListener(){ 55 @Override 56 public void onClick(View v){ 57 button_flag = 0; 58 59 } 60 }); 61 //不正解 62 Mistake.setOnClickListener(new View.OnClickListener() { 63 @Override 64 public void onClick(View v) { 65 button_flag = 1; 66 } 67 }); 68 //回答 69 Answer.setOnClickListener(new View.OnClickListener(){ 70 71 @Override 72 public void onClick(View v){ 73 String FILE; 74 FILE = "/sdcard/ans.csv"; 75 try { 76 BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(FILE, true), "UTF-8")); 77 String write_int = String.valueOf(ydate)+","+ "answer"+","+String.valueOf(button_flag) + "/n"; 78 bw.write(write_int); 79 bw.newLine(); 80 bw.close(); 81 } catch (UnsupportedEncodingException k) { 82 k.printStackTrace(); 83 } catch (FileNotFoundException k) { 84 k.printStackTrace(); 85 } catch (IOException k) { 86 k.printStackTrace(); 87 } 88 } 89 90 }); 91 } 92 93 @Override 94 public void onSensorChanged(SensorEvent e) { 95 96 switch (e.sensor.getType()) { 97 //加速度 98 case Sensor.TYPE_ACCELEROMETER: 99 aValues[0] = (e.values[0]); 100 aValues[1] = (e.values[1]); 101 aValues[2] = (e.values[2]); 102 break; 103 //ジャイロ 104 case Sensor.TYPE_GYROSCOPE: 105 gValues[0] = (e.values[0]); 106 gValues[1] = (e.values[1]); 107 gValues[2] = (e.values[2]); 108 break; 109 } 110 111 //決定木 112 if (gValues[1] < 0.14) { 113 if (aValues[0] < 0.04) { 114 if (gValues[0] < -0.31) { 115 xdate.setText(String.valueOf("消費カロリー")); 116 ydate = String.valueOf("Calorie,1"); 117 } else if (gValues[1] < -0.014) { 118 if (aValues[1] <= 0.44) { 119 xdate.setText(String.valueOf("傾斜")); 120 ydate = String.valueOf("Inclination,2"); 121 } else { 122 xdate.setText(String.valueOf("走行時間")); 123 ydate = String.valueOf("Time,3"); 124 } 125 } else { 126 xdate.setText(String.valueOf("速度")); 127 ydate = String.valueOf("Speed,4"); 128 } 129 } else if(gValues[1] < -0.11) { 130 if (gValues[2] >= 0.18) { 131 xdate.setText(String.valueOf("傾斜")); 132 ydate = String.valueOf("Inclination,5"); 133 } else { 134 xdate.setText(String.valueOf("走行時間")); 135 ydate = String.valueOf("Time,6"); 136 } 137 } else if (gValues[0] < -0.0061) { 138 if (gValues[1] < 0.03) { 139 if (gValues[0] < -0.028) { 140 if (aValues[1] >= 2.4) { 141 xdate.setText(String.valueOf("消費カロリー")); 142 ydate = String.valueOf("Calorie,7"); 143 } else { 144 xdate.setText(String.valueOf("傾斜")); 145 ydate = String.valueOf("Inclination,8"); 146 } 147 } else { 148 xdate.setText(String.valueOf("走行時間")); 149 ydate = String.valueOf("Time,9"); 150 } 151 } else { 152 xdate.setText(String.valueOf("走行距離")); 153 ydate = String.valueOf("Distance,10"); 154 } 155 } else if (gValues[1] < 0.054) { 156 xdate.setText(String.valueOf("走行距離")); 157 ydate = String.valueOf("Distance,11"); 158 } else { 159 xdate.setText(String.valueOf("走行時間")); 160 ydate = String.valueOf("Time,12"); 161 } 162 } else if (aValues[1] >= 0.79) { 163 if (aValues[2] >= 8.2) { 164 if (gValues[0] < 0.078) { 165 if (gValues[1] >= 0.17) { 166 if (aValues[1] < 3.1) { 167 xdate.setText(String.valueOf("心拍")); 168 ydate = String.valueOf("Heart,13"); 169 } else { 170 xdate.setText(String.valueOf("傾斜")); 171 ydate = String.valueOf("Inclination,14"); 172 } 173 } else { 174 xdate.setText(String.valueOf("速度")); 175 ydate = String.valueOf("Speed,15"); 176 } 177 } else { 178 xdate.setText(String.valueOf("走行距離")); 179 ydate = String.valueOf("Distance,16"); 180 } 181 } else { 182 xdate.setText(String.valueOf("速度")); 183 ydate = String.valueOf("Speed,17"); 184 } 185 } else { 186 xdate.setText(String.valueOf("速度")); 187 ydate = String.valueOf("Speed,18"); 188 } 189 /* 190 if (aValues[1] ) 191 xdate.setText(String.valueOf("速度")); 192 ydate = String.valueOf("Speed,1"); 193 } else if (gValues[0] < -0.29) { 194 xdate.setText(String.valueOf("消費カロリー")); 195 ydate = String.valueOf("Calorie,8"); 196 } else if (gValues[1] < -0.06) { 197 if (gValues[2] >= 0.38) { 198 xdate.setText(String.valueOf("高度")); 199 ydate = String.valueOf("Altitude,7"); 200 } else { 201 xdate.setText(String.valueOf("走行時間")); 202 ydate = String.valueOf("Time,6"); 203 } 204 } else if (gValues[0] < 0.011) { 205 if (gValues[1] >= 0.077) { 206 xdate.setText(String.valueOf("心拍")); 207 ydate = String.valueOf("Heart,5"); 208 } else { 209 xdate.setText(String.valueOf("速度")); 210 ydate = String.valueOf("Speed,4"); 211 } 212 } else if (aValues[0] >= 0.16) { 213 xdate.setText(String.valueOf("走行距離")); 214 ydate = String.valueOf("Distance,3"); 215 } else { 216 xdate.setText(String.valueOf("速度")); 217 ydate = String.valueOf("Speed,2"); 218 } 219 220 try { 221 Thread.sleep(1000); 222 } catch (InterruptedException p) { 223 224 } 225 */ 226 } 227 228 229 @Override 230 protected void onResume() { 231 super.onResume(); 232 //センサーのイベントリスナーを登録 233 //加速度 234 Accele = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); 235 sensorManager.registerListener(this, Accele, 100000); 236 //ジャイロ 237 Gyro = sensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE); 238 sensorManager.registerListener(this, Gyro, 100000); 239 } 240 241 242 public void onStop() { 243 super.onStop(); 244 sensorManager.unregisterListener(this); 245 } 246 247 @Override 248 public void onAccuracyChanged(Sensor sensor, int i) { 249 250 } 251 252 253} 254
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/01/25 18:09
2017/01/25 22:23