目前我正在开发使用Arduino的空气质量监测设备原型。该设备集成了三个气体传感器,将通过HC-05蓝牙模块发送数据到我的Android应用程序。我能够实时接收这些值并将其显示在屏幕上,并同时将其保存在SQL数据库中。
我遇到的问题是当我实现一个切换按钮来捕获数据时,用户只有在需要时才能将数据保存到数据库中。为了实现这一点,我必须每隔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();
}
}
});
答案 0 :(得分:0)
您正在尝试中断其他线程。将线程设为全局,然后在OnClickListener
内,首先如果切换按钮关闭则中断线程(确保不在此处创建新线程)。如果切换按钮打开,请指定一个新线程并开始。