現在、Arduinoを使用した大気モニタリング装置のプロトタイプを開発中です。このデバイスは3つのガスセンサと統合され、HC-05ブルートゥースモジュールを介してデータをAndroidアプリに送信します。私はリアルタイムで値を受け取り、それを画面上に表示し、同時にSQLデータベースに保存することができます。ToggleButtonをアンドロイドで使用してスレッドを開始および停止する方法は?
私が遭遇した問題は、データをキャプチャするトグルボタンを実装しているときに問題が発生するため、ユーザーは必要な場合にのみデータをデータベースに保存できます。これを実現するには、5秒ごとにデータを保存するスレッドを使用し、トグルボタンを使用してスレッドを開始および停止する必要があります。しかし、私のコードはうまくいかず、トグルボタンを押すたびにデータがデータベースに保存され始めますが、トグルボタンを止めると機能しません。私は既にトグルボタンをオフにしても、スレッドは実行し続けます。
私はJAVAやAndroidプログラミングについても非常に新しくなっています。どうぞよろしくお願いいたします。
ここに私のコード。 (トグルボタンとスレッド部分)
logdata.setChecked(false);
logdata.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
// Is the ToggleButton on?
boolean on = ((ToggleButton) view).isChecked();
Thread capture = new Thread() {
@Override
public void run() {
try {
while (!isInterrupted()) {
Thread.sleep(5000);
runOnUiThread(new Runnable() {
@Override
public void run() {
MyLocationListener callgpsclass = new MyLocationListener();
long date = System.currentTimeMillis();
SimpleDateFormat sdf = new SimpleDateFormat("dd MMM yyyy/hh:mm:ss a");
String dateString = sdf.format(date);
String capdata_gps = (String) callgpsclass.showGPS.getText();
String capdata_mq135 = (String) showMq135.getText();
String capdata_mq9 = (String) showMq9.getText();
String capdata_dust = (String) showDust.getText();
String capdata_air_quality = (String) showAirQuality.getText();
// Insert a row
dbhlpr.insertReading(
dateString,
capdata_gps,
capdata_mq135,
capdata_mq9,
capdata_dust,
capdata_air_quality
);
}
});
}
} catch (InterruptedException e) {
}
}
};
if (on) {
capture.start();
Toast.makeText(getApplicationContext(), "Data capture started", Toast.LENGTH_SHORT).show();
}
else{
capture.interrupt();
Toast.makeText(getApplicationContext(), "Data capture stopped", Toast.LENGTH_SHORT).show();
}
}
});
申し訳ありませんが、単にコードを要求することはできません。あなたはできない部分は? Googleでその部分を行う方法を検索しますか?ひとつひとつを学ぶ。 –