2014-04-11 3 views
0

나는 9 시간 동안이 문제를 해결하려고 노력했지만 아무것도 작동하지 않는 것 같습니다. 나는 특정 기간 동안 안드로이드 전화에서 사용 가능한 모든 센서의 값을 캡처하고이 값을 원격 데이터베이스에 저장하는 앱을 개발 중입니다. 두 가지 명심해야안드로이드 textview를 업데이트하기 전에 변수 지연

  1. 각 센서 자체 캡쳐 주파수를 갖는다 (즉 가속도계 각각 10 초 자이로 각각 5 초 부근 각 60초 등).

  2. 이 프로세스는 무기한으로 실행되지 않으므로 값을 캡처하는 데 소요 된 총 시간을 지정하는 duration이라는 변수가 있습니다. 예를 들어, acctime = 10 및 기간이 = 60이면 0, 10, 20, 30, 40, 50 및 60 표시에서 7 개의 값이 캡처됩니다. 코드 이제

OK : 상기 코드의

public void onSensorChanged(SensorEvent event) { 
    Sensor s = event.sensor; 
    if (s.getType() == Sensor.TYPE_ACCELEROMETER) 
    { 
      acc1 = event.values[0]; 
      acc2 = event.values[1]; 
      acc3 = event.values[2]; 
      accm = (float) Math.sqrt(acc1 * acc1 + acc2 * acc2 + acc3 * acc3); 
    } 
} 

는 숫자가 성공적으로 각각 변수로 저장된다. (주파수 및 총 시간)에 따라 이전에 지정된 다음에, I는 텍스트 뷰 이들 변수를 표시하고 텍스트 뷰를 업데이트 할 다음 텍스트 뷰가 업데이트 if (i % acctime == 0) 보장 것은 여기

public void capture(View view) { 
     DecimalFormat df = new DecimalFormat("#.###"); 
     for (i = 0; i < duration; i++) { 
      if ((i+1) % acctime == 0) { 
       acc1 = Float.valueOf(df.format(acc1)); 
       acc2 = Float.valueOf(df.format(acc2)); 
       acc3 = Float.valueOf(df.format(acc3)); 
       accm = Float.valueOf(df.format(accm)); 
       acctext.setText("i: " + i + "\nAccelerometer:\n\nX: " + acc1 
         + "\nY: " + acc2 + "\nZ: " + acc3 + "\nMagnitude: " 
         + accm); 

      } 
     } 
    } 

시험마다 난 예를 들어 acctime = 10 인 경우 i = 0, 10, 20, 30, 40, 50 및 60 일 때 텍스트 뷰가 업데이트됩니다.

그러나 인생은 계속 진행하기 전에 1 초 동안 루프를 일시 중지하는 방법을 알아낼 수 없었습니다 (1 초의 시간 값을 지정하면 0부터 지속까지 루프가 의미가 있음을 의미합니다). 그래서 나머지는 루프를 일시 중지합니다. 1 초 동안.

try/catch 블록 사이에서 Thread.Sleep(1000)을 시도했지만 작동하지 않았습니다 (충돌했습니다).

android.os.SystemClock.sleep(1000);에 대해서도 동일한 현상이 발생합니다.

나는 또한 작동하지 않았다

Handler handler = new Handler(); 
    handler.postDelayed(new Runnable() { 
    public void run() { 
     //insert code here 
    } 
}, 1000); 

어느

과 같은 몇 가지 코드를 발견, 아니면 내가 잘못 뭔가를 구현하고있다. 제발, 어떤 도움을 주시면 대단히 감사하겠습니다.

다음은 기능의 전체 버전이며, 나에게 가장 의미있는 버전입니다. 1 초에 대한 지연하기 위해 다음과 같이

public void capture(View view) { 
     DecimalFormat df = new DecimalFormat("#.###"); 
     int i = 1; 
     while (i <= duration) { 
      if (acctime != -1 && (i % acctime == 0 || i == 1)) { 
       acc1 = Float.valueOf(df.format(acc1)); 
       acc2 = Float.valueOf(df.format(acc2)); 
       acc3 = Float.valueOf(df.format(acc3)); 
       accm = Float.valueOf(df.format(accm)); 
       acctext.setText("Accelerometer:\n\nX: " + acc1 + "\nY: " + acc2 
         + "\nZ: " + acc3 + "\nMagnitude: " + accm); 
      } 
      if (magtime != -1 && (i % magtime == 0 || i == 1)) { 
       mag1 = Float.valueOf(df.format(mag1)); 
       mag2 = Float.valueOf(df.format(mag2)); 
       mag3 = Float.valueOf(df.format(mag3)); 
       magm = Float.valueOf(df.format(magm)); 
       magtext.setText("Magnetometer\n\nX: " + mag1 + "\nY: " + mag2 
         + "\nZ: " + mag3 + "\nMagnitude: " + magm); 
      } 
      if (proxtime != -1 && (i % proxtime == 0 || i == 1)) { 
       prox = Float.valueOf(df.format(prox)); 
       proxtext.setText("Proximity\n\nMagnitude: " + prox); 
      } 
      if (lighttime != -1 && (i % lighttime == 0 || i == 1)) { 
       light = Float.valueOf(df.format(light)); 
       lighttext.setText("Light:\n\nMagnitude: " + light); 
      } 
      if (presstime != -1 && (i % presstime == 0 || i == 1)) { 
       pressure = Float.valueOf(df.format(pressure)); 
       presstext.setText("Pressure:\n\nMagnitude: " + pressure); 
      } 
      if (gyrotime != -1 && (i % gyrotime == 0 || i == 1)) { 
       gyro1 = Float.valueOf(df.format(gyro1)); 
       gyro2 = Float.valueOf(df.format(gyro2)); 
       gyro3 = Float.valueOf(df.format(gyro3)); 
       gyrom = Float.valueOf(df.format(gyrom)); 
       gyrotext.setText("Gyroscope:\n\nX: " + gyro1 + "\nY: " + gyro2 
         + "\nZ: " + gyro3 + "\nMagnitude: " + gyrom); 
      } 
      try { 
       Thread.sleep(1000); 
      } catch (InterruptedException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      i++; 
     } 
    } 
+0

show logcat error from crash? 당신은 UI를 스레드에서 textview 처리 있습니까? – La5t5tarfighter

+0

저는 현재 화면에서 사용 중이거나 표시중인 활동 코드에서 textview를 처리하고 있습니다. – user3027427

답변

0

Handler 적용 : 당신이 찾을 수있는 오류를 지적 해주십시오.

int i = 1; 
public void capture(View view) { 
    final DecimalFormat df = new DecimalFormat("#.###"); 


    Handler handler = new Handler(); 

    while (i <= duration) { 

     handler.postDelayed(new Runnable() { 

      @Override 
      public void run() { 
       if (acctime != -1 && (i % acctime == 0 || i == 1)) { 
        acc1 = Float.valueOf(df.format(acc1)); 
        acc2 = Float.valueOf(df.format(acc2)); 
        acc3 = Float.valueOf(df.format(acc3)); 
        accm = Float.valueOf(df.format(accm)); 
        acctext.setText("Accelerometer:\n\nX: " + acc1 
          + "\nY: " + acc2 + "\nZ: " + acc3 
          + "\nMagnitude: " + accm); 
       } 
       if (magtime != -1 && (i % magtime == 0 || i == 1)) { 
        mag1 = Float.valueOf(df.format(mag1)); 
        mag2 = Float.valueOf(df.format(mag2)); 
        mag3 = Float.valueOf(df.format(mag3)); 
        magm = Float.valueOf(df.format(magm)); 
        magtext.setText("Magnetometer\n\nX: " + mag1 + "\nY: " 
          + mag2 + "\nZ: " + mag3 + "\nMagnitude: " 
          + magm); 
       } 
       if (proxtime != -1 && (i % proxtime == 0 || i == 1)) { 
        prox = Float.valueOf(df.format(prox)); 
        proxtext.setText("Proximity\n\nMagnitude: " + prox); 
       } 
       if (lighttime != -1 && (i % lighttime == 0 || i == 1)) { 
        light = Float.valueOf(df.format(light)); 
        lighttext.setText("Light:\n\nMagnitude: " + light); 
       } 
       if (presstime != -1 && (i % presstime == 0 || i == 1)) { 
        pressure = Float.valueOf(df.format(pressure)); 
        presstext 
          .setText("Pressure:\n\nMagnitude: " + pressure); 
       } 
       if (gyrotime != -1 && (i % gyrotime == 0 || i == 1)) { 
        gyro1 = Float.valueOf(df.format(gyro1)); 
        gyro2 = Float.valueOf(df.format(gyro2)); 
        gyro3 = Float.valueOf(df.format(gyro3)); 
        gyrom = Float.valueOf(df.format(gyrom)); 
        gyrotext.setText("Gyroscope:\n\nX: " + gyro1 + "\nY: " 
          + gyro2 + "\nZ: " + gyro3 + "\nMagnitude: " 
          + gyrom); 
       } 

       i++; 
      } 

     }, 1000); 
    } 
} 
+0

답장을 보내 주셔서 감사합니다. 그러나 코드를 실행하고 응용 프로그램이 약 1 분 동 안 (지속 시간이 30 초) 동결 된 다음 충돌이 발생했습니다. 문제를 정확하게 지적하기 위해 내가 제공 할 수있는 모든 것? – user3027427

+0

어떤 도움을 주시면 대단히 감사하겠습니다 ... 나는 좀 붙어 있습니다 : S – user3027427