2017-09-28 5 views
0

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

答えて

0

異なるスレッドを中断しようとしています。グローバルにスレッドを作成してから、OnClickListenerの中で、最初にトグルボタンがオフの場合はスレッドを中断します(ここでは新しいスレッドを作成しないでください)。トグルボタンがオンの場合は、新しいスレッドを割り当てて開始します。

+0

申し訳ありませんが、単にコードを要求することはできません。あなたはできない部分は? Googleでその部分を行う方法を検索しますか?ひとつひとつを学ぶ。 –

関連する問題