2017-09-28 6 views
0

현재 Arduino를 사용하여 공기 품질 모니터링 장치의 프로토 타입을 개발 중입니다. 이 장치는 HC-05 블루투스 모듈을 통해 데이터를 내 안드로이드 앱에 전송할 3 개의 가스 센서와 통합되어 있습니다. 실시간으로 값을 받고 화면에 표시하고 동시에 SQL 데이터베이스에 저장할 수 있습니다.ToggleButton을 사용하여 android에서 스레드를 시작하고 중지하는 방법은 무엇입니까?

내게 발생한 문제는 데이터를 캡처하기 위해 토글 단추를 구현할 때 문제가 발생하므로 사용자가 원하는 경우에만 데이터를 데이터베이스에 저장할 수 있습니다. 이를 달성하기 위해서는 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에서 해당 부분을 수행하는 방법을 검색 하시겠습니까? 하나씩 배우십시오. –