我的应用程序有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没有以任何方式排序。我需要输出按车辆类型和方向排序的值。
答案 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数据库的理想情况。因此,通过选择时间戳,您可以轻松地从中获取此间隔。