更新android textview之前的可变延迟

时间:2014-04-11 18:05:28

标签: android time textview delay sensor

我一直试图连续9小时解决这个问题,但似乎没有任何效果。我正在构建一个应用程序,用于捕获Android手机中特定时间段内所有可用传感器的值,并将这些值存储在远程数据库中。 应该记住两件事:

  1. 每个传感器都有自己的捕获频率(即加速度计每10秒钟,陀螺仪每5秒钟,接近60秒等等)。

  2. 此过程不会无限期地进行,因此有一个名为duration的变量,它指定捕获值所花费的总时间。例如,如果 acctime = 10且持续时间 = 60,那么我们最终会得到在0s,10s,20s,30s,40s,50s和7s捕获的7个值。 60s标记。

  3. 现在可以使用代码:

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

    在上面的代码中,值成功存储到各自的变量中。 接下来,我想在textview中显示这些变量,并按照之前的指定更新textview(根据频率和总持续时间):

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

    这里,测试if (i % acctime == 0)保证每当i是acctime的倍数时就更新textview,这正是我们想要的:例如,如果acctime = 10,则当i = 0时更新textview, 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);
    

    要么它不起作用,要么我正在实现不正确的东西。 拜托,非常感谢任何帮助。

    以下是该功能的完整版本,它是对我来说最有意义的版本。请指出您可以找到的任何错误:

    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++;
            }
        }
    

1 个答案:

答案 0 :(得分:0)

按如下方式应用Handler以延迟1秒。

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