2017-09-28 2 views
0

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(); 
      } 
     } 
    }); 

Antwort

0

Sie versuchen, einen anderen Thread zu unterbrechen. Machen Sie den Thread global und danach innerhalb der OnClickListener, unterbrechen Sie zuerst den Thread, wenn die Schaltfläche deaktiviert ist (Stellen Sie sicher, dass Sie hier keinen neuen Thread erstellen). Und wenn der Schalter aktiviert ist, weisen Sie einen neuen Thread zu und starten Sie ihn.

+0

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. –

Verwandte Themen