计算在15分钟块中按下按钮的次数

时间:2011-07-18 13:30:01

标签: java android csv hashmap counter

我的应用程序有24个按钮来计算不同的车辆类型和方向(该应用程序将用于计算流量)。目前,每次按下按钮时,我都会将一行保存到.csv文件中。 csv文件包含时间戳,方向等。

我必须以15分钟的间隔来衡量按下每个按钮的次数。

我应该如何存储按钮的计数器? 我只需要在15分钟内输出每个按钮(每个按钮都有不同的标签用于识别)的频率。

我正在考虑使用HashMap,它可以将按钮的标记作为键,将出现次数作为值,如下所示:

HashMap<String, Integer> hm = new HashMap<String, Integer>();

Integer value = (Integer) hm.get(buttonTag);
    if (value == null) {
        hm.put(buttonTag, 1);
    } else {
        int nr_occ = value.intValue() + 1;
        hm.put(buttonTag, nr_occ);
    }

但是,我不需要按下按钮的总和,而是需要15分钟的按钮。因为我已经在原始csv文件中写了时间戳,所以我想知道如何存储这些值。

编辑:我目前正在测试HashMap,它在计算方面做得非常好,但我看到两个问题:首先,将它分组为15分钟的间隔,其次,hashmap没有以任何方式排序。我需要输出按车辆类型和方向排序的值。

3 个答案:

答案 0 :(得分:1)

如果您的数据很简单(即您只需要一个键/值对),请考虑使用SharedPreferences来存储按钮ID和按下它的时间。

这是一个很好的方法,因为它非常快。您已经将信息放入.csv文件中,但是要提取数据并遍历它,以便您可以比较IMO上的时间戳过多。

当按下按钮时,将数据存储在.csv文件中,然后存储键/值(id / timestamp),然后您可以迭代它并进行比较并输出您需要输出的任何内容。

另一种方式(可能更好)是简单地创建和写入.csv文件,然后转储它并使用其他更强大的东西来处理这些数据,因为你可能会这样做。

编辑:我看到很多答案都说使用SQLite,静态等等......

这些都是你所要求的劣等方法。这就是为什么...... SQLite对于简单的按钮ID和时间戳来说太过分了。但是,如果您认为将来可能需要存储更多数据,这实际上可能是一种选择。

如果系统发生破坏活动,则可能会破坏静态变量。

答案 1 :(得分:1)

如果您想要,只需在每次活动被销毁(HashMap)时序列化onDestroy并在创建活动时将其加载回来({ {1}})。这将是最快捷,最简单的方式。

您将数据序列化到哪里?到onCreate

中的文件

哦,您可能希望跟踪时间戳,每15分钟清除一次Environment.getExternalStorage() - 您可以将其放入HashMap

我假设你已经知道如何做到这一点,以防万一:Java Serialization

答案 2 :(得分:0)

可能是我,但这听起来是使用SQLite数据库的理想情况。因此,通过选择时间戳,您可以轻松地从中获取此间隔。