2011-07-18 12 views
1

私のアプリケーションには、さまざまな車種と道順を数えるための24のボタンがあります(アプリはトラフィックのカウントに使用されます)。現在、ボタンを押すたびに.csvファイルに行を保存しています。 csvファイルにタイムスタンプ、方向などが含まれていますボタンが15分のチャンクで押された回数の回数

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をテストしていますが、それは非常にうまく動作していますが、2つの問題があります。まず、15分間隔でグループ化し、次にハッシュマップは方法。私は車両の種類と方向でソートされた値を出力する必要があります。

+0

あなたはアプリが使用されている間、メモリにカウンタを格納する方法を参照していますか?もしそうなら、前回のアプリのカウンターを表示する必要がありますか? –

+0

アプリの使用中にカウンターを保存するだけで、以前のランからのカウンターは無関係です。 – intagli

+0

スタティックintを使用し、ボタンを押すたびにカウントアップします。 – iDroid

答えて

1

データが単純な場合(つまり、キーと値のペアのみが必要な場合)は、SharedPreferencesを使用して、ボタンIDと押された時間を保存することを検討してください。

非常に高速ですので、これは良い方法です。あなたはすでに情報を.csvファイルに入れておきますが、データを抽出してそれを通ってタイムスタンプを比較できるように、あまりオーバーヘッドのIMOです。

ボタンを押したときに.csvファイルにデータを保存し、キー/値(ID /タイムスタンプ)も保存してから、繰り返し実行して、出力する必要があるものを比較して出力できます。

もう1つの方法は、.csvファイルを作成して書き込んだ後にダンプし、おそらくこれを行うようにデータを処理するために他の方法を使用することです。

編集:私はこれらはあなたが求めているもののためのすべての悪い方法です

...などのSQLiteを使用するように言っている答え、静力学、の多くを参照してください。理由は次のとおりです。 SQLiteは単純なボタンIDとタイムスタンプではあまりにも多すぎます。しかし、今後さらに多くのデータを格納する必要があると思われる場合は、実際にはこれがオプションになる可能性があります。

システムがアクティビティを破棄した場合、静的変数が破損する可能性があります。

+0

私はタイムスタンプ、方向、ターン、車両タイプを保存しなければなりません。現在(direction、turn、vehicletype)はボタンのタグです。 csvファイルの生データをどのように処理できますか?私は彼らがスクリプトを何か実行することなく、デバイスからのカウントを持っている場合、私のクライアントのために素晴らしいだろう。しかし、私はどのようにデータを処理するつもりですか? – intagli

+1

@Emanuelまだ識別子と値だけが必要だと言っていますが。これはSharedPreferencesがIMOを輝かせる場所です。あなたが望むなら、15分ごとにそれをすばやくクリアして、もう一度書き始めて、各識別子の一致数を数えてください。 – rf43

+0

SQLiteについて、私はSQLiteでやってみましたが、あなたの言うように、この比較的簡単な作業のためには本当に複雑です。そして、私は、今後さらに多くのデータを保存する必要がないことを100%確信しています。 SharedPreferencesについて:ボタンのタグをキーとして、タイムスタンプを値として保存します。それから私は15分のウィンドウで何回出現したのかを数え、これを処理します。ユーザーが停止ボタンをクリックしたときに設定を削除しますか?これで十分でしょうか? – intagli

0

これは私には当てはまるかもしれませんが、これはSQLiteデータベースを使用するのに理想的な状況です。タイムスタンプを選択することで、この間隔のことを簡単に取得できます。

+0

私は既にSQLiteデータベースでそれをやってみましたが、私は少しは圧倒されていたと言わざるを得ません。しかし、私は本当にSQLiteが本当に最適な選択だと思うようになっています。 データベースを手伝ってもらえますか? 私はすべてのapp-startで新しいテーブルを作成し、このデータを格納する必要があると思います:id、date、time、vehicletype、direction、turn。そして、必要なデータを選択し、新しいcsvファイルにデータを書き込んでください。 – intagli

1

あなたはクールになりたい場合は、単にHashMapあなたの活動が破壊されるたび(onDestroy)を連載し、あなたの活動が作成されたとき、それをバックロード(onCreate)。これは、最も簡単で簡単な方法です。

あなたはどこにデータをシリアル化していますか? Environment.getExternalStorage()のファイル。

ああ、15分ごとにHashMapをクリアするタイムスタンプを追跡したい場合は、これをSharedPreferencesに入れることができます。

私はあなたがすでにこれを行う方法を知っているが、念のために想定していますJava Serialization

+0

この質問は申し訳ありませんが、なぜHashMapをシリアル化する必要がありますか?私は実際にどのように15分のチャンクを数えたのか分かりません。 – intagli

+0

それから、それをリストのHashMap(または配列または単に2次元配列を作る)にしてください!現在のインデックスを調べるには、タイムスタンプ+ System.currentTimeInMillis()を使用します。その後、あなたはきれいなグラフを作ることができます。シリアル化プロセス全体は、アプリケーションが破棄された場合に、(単純な)データを保持することです。 –

+0

したがって、シリアル化を使用して、アプリケーションが閉じられたときにデータがそこに残っていることを確認します。リストのこのHashMapはどのように見えますか?私は、HashMapがボタンのタグをキーとして含み、リストにタイムスタンプが含まれると仮定します。 – intagli

関連する問題