Подсчитайте количество нажатий кнопки за 15 минут - PullRequest
1 голос
/ 18 июля 2011

Мое приложение имеет 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-минутным интервалам, а во-вторых, хэш-карту никак не сортируют.Мне нужно вывести значения, отсортированные по типам транспортных средств и направлениям.

Ответы [ 3 ]

1 голос
/ 18 июля 2011

Если ваши данные просты (т.е. вам нужна только пара ключ / значение), рассмотрите возможность использования SharedPreferences для сохранения идентификатора кнопки и времени ее нажатия.

Этохороший способ, потому что это очень быстро.Вы уже поместили информацию в файл .csv, но извлекать данные и проходить через них, чтобы можно было сравнивать временные метки, слишком много. IMO.

При нажатии кнопки сохраняйте свои данные в файле .csv.затем также сохраните ключ / значение (id / timestamp), затем вы можете выполнить итерацию по нему и выполнить сравнение и вывод того, что вам нужно вывести.

Другой способ (и, возможно, даже лучше) - просто создать изапишите в ваш файл .csv, затем сделайте дамп и используйте что-то еще более надежное для обработки этих данных, поскольку вы, вероятно, будете делать это в любом случае.

РЕДАКТИРОВАТЬ: я вижу много ответов, в которых говорится об использовании SQLite,статика и т.д ...

Это все низшие методы для того, что вы просите.Вот почему ... SQLite СЛИШКОМ СЛИШКОМ просто простой идентификатор кнопки и метка времени.Однако, если вы считаете, что вам может понадобиться сохранить больше данных в будущем, на самом деле это может быть вариантом.

Статическая переменная может быть уничтожена, если система уничтожит действие.

1 голос
/ 18 июля 2011

Если вы хотите быть крутым , просто сериализуйте HashMap каждый раз, когда ваша деятельность разрушается (onDestroy), и загружайте его обратно, когда ваша деятельность создается (onCreate). Это будет самый быстрый и простой способ.

Куда вы сериализуете свои данные? К файлу в Environment.getExternalStorage().

Да, и вы, возможно, захотите отслеживать метку времени, чтобы очищать HashMap каждые 15 минут - вы можете поместить это в SharedPreferences.

Полагаю, вы уже знаете, как это сделать, но на всякий случай: Сериализация Java

0 голосов
/ 18 июля 2011

Может быть, но это звучит как идеальная ситуация для использования базы данных SQLite. Таким образом, вы можете легко получить этот интервал, выбрав отметку времени.

...