Gegenwärtig entwickle ich Prototyp von Luftqualitätsüberwachungsgerät mit Arduino. Das Gerät ist mit drei Gassensoren ausgestattet, die die Daten über das HC-05 Bluetooth-Modul an meine Android App senden. Ich kann die Werte in Echtzeit empfangen und auf dem Bildschirm anzeigen und gleichzeitig in der SQL-Datenbank speichern.Wie starte und stoppe ich einen Thread mit ToggleButton in Android?
Das Problem, das von mir angetroffen wird, ist, wenn ich eine umschaltbare Schaltfläche implementieren, um die Daten zu erfassen, damit Benutzer die Daten in der Datenbank nur speichern können, wenn sie möchten. Um dies zu erreichen, muss ich einen Thread verwenden, um die Daten alle 5 Sekunden zu speichern und den Thread mit dem Umschaltknopf zu starten und zu stoppen. Aber mein Code hat nicht geklappt, jedesmal, wenn ich die Umschalttaste drücke, fängt er an, die Daten in der Datenbank zu speichern, aber wenn ich die Umschalttaste anhabe, funktioniert es nicht. Der Thread läuft einfach weiter, obwohl ich die Umschalttaste bereits ausgeblendet habe.
Ich bin sehr neu in JAVA und auch Android-Programmierung, bitte helfen Sie mir.
Hier mein Code. (Die Umschalttaste und der Gewindeteil)
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();
}
}
});
Sorry, Sie können nicht einfach nach Code fragen. Welchen Teil könntest du nicht machen? Suche in Google, wie man diesen Teil macht? lerne eins nach dem anderen. –