0

クライアントがjson形式でメッセージを送信するのを待っているSocketサーバーがあります。データをデータベースに保存する必要はありませんが、今のところ、ハッシュテーブルに保存したいと思います。したがって、クライアントがメッセージを送信すると、サーバーは以前のメッセージを失うことなく、それをハッシュテーブルに追加します。

これが私のハッシュテーブルの宣言です:

private static Hashtable<Integer,String> table = new Hashtable<Integer,String>();

サーバーに到達するメッセージと呼ばれるメソッドは次のとおりです。

    private void HashTable(String string){
    //JsonArray questions =  new JsonArray();
    //questions = string;
    //for(int i = 0; i < questions.length(); i++) {
        //JsonObject question = questions.getJsonObject(i);
        JSONObject jsonObj;
        try {
            jsonObj = new JSONObject(string);
            int id = jsonObj.optInt("DeviceID", -1);
            String name = jsonObj.toString();
            table.put(id, name);
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    //}
}

上記のコードは、以前のメッセージからのデータを保持していません。誰でもヒントを教えてもらえますか?

ありがとうございました

4

2 に答える 2

2

int id = 1;- これを変更することはないので、毎回 ID 1 のエントリを置き換えるだけです。一意の ID ジェネレーターが必要かid、エントリが追加されるたびにインクリメントする必要があります。

編集:コメント者が正しく指摘しているように、HashMapnotを使用する必要がありHashTable実際にメソッドを呼び出すべきではありませんHashtable...

編集 2:コード サンプルを変更したため、これは正確ではなくなりましたが、現在起こっていることはDeviceID存在しないため-1、同じデバイス ID を取得するか、取得し続けることです。もちろん、あなたは同じデバイスからの複数のメッセージを保存したいと言っているので、デバイス ID を単独で使用することはあなたがしたいことではありません。代わりに何らかのメッセージ ID を用意する必要があります。ほとんどの場合、デバイス上で生成され、何らかの方法でデバイス ID を組み込み、デバイス ID が一意であることを確認します。

于 2013-03-05T20:10:50.583 に答える
1

これは、「DeviceId」が Json から null の場合、常に同じキー「1」で格納されることになるためです。したがって、古い値を置き換えます。

解決

private static AtomicInteger count = new AtomicInteger ;

ハッシュテーブルに挿入する場所に適応します

int id = jsonObj.optInt("DeviceID", count.addAndGet(1) );
于 2013-03-05T20:22:38.717 に答える