2016-11-17 1 views
0

私はチャットアプリケーションを作成しているので、一意のメッセージIDを生成します。 重複するメッセージIDを決して作成することはできません。独自のメッセージIDを作成するwhatsアプリケーションのように

+0

より良い使用のMongoDB。 _idはあなたのIDを作成できます。 –

+0

[Android SMS設定固有ID](http://stackoverflow.com/questions/11377730/android-sms-setting-unique-id)の可能な複製 – mabe02

答えて

4

のMongoDBのObjectIdはかなり複雑で、おそらくビューの一意のIDポイントから良いランダム性の一つです。 ソースコードを見て、どのように生成されているかを見ることができます。後世のためにここに彼らの公式ドキュメントから定義を残し

たObjectIdは、小さな可能性がユニークな、生成するために高速で、かつ命じています。 のObjectId値は最初の4バイトは、具体的には、のObjectIdの作成を反映 タイムスタンプされ、12バイトからなる:Mongoの者のObjectIdの

a 4-byte value representing the seconds since the Unix epoch, 
a 3-byte machine identifier, 
a 2-byte process id, and 
a 3-byte counter, starting with a random value. 

例:

ObjectId("507f1f77bcf86cd799439011") 
1

あなたの貧弱な記述に基づいて、化合物IDを作成することができます。たとえば、ユーザーID +タイムスタンプで自分の仲間を作成することができます。このパターンを使用する場合、ユーザーIDの長さはすべてのidesで同じでなければなりません。それがない場合は、あなたがより良い説明のためのユーザーのIDE

のすべてのために同じ長さを得るために、あなたの現在のID befor「0」を追加する必要があります。実際の問題として

String uniquemsgid= userid+ System.currentTimeMillis(); 

を、ユーザー一意のタイムスタンプがこのユーザーに固有のIDを持つ 注意:タイムスタンプまたは任意の形式の日付のみを使用する場合、このメソッドは一意のメッセージIDを保証できません。 2人のユーザーがすぐにメッセージを作成できるため、

0

1つを生成する方法はたくさんあります。 1つの一般的な方法は、タイムスタンプ値を生成し、これを一意のIDとして使用することです。

たとえば、あなたがこれを行うことができます。

public int createID(){  
Date now = new Date();  
int id = Integer.parseInt(new SimpleDateFormat("ddHHmmss", Locale.US).format(now));  
return id; } 

あなたもウルのアプリは必要に応じてそれをよりユニークな作ってみると、それは文字列を作成し、それを任意の特定の文字列フォーマットを追加することができます!

0

Random randomId= new Random(); int id = randLan.nextInt(99999) + 1; 次に、Idがすでに与えられているかどうかを確認し、そうであれば再試行します。そうでなければ、IDを持っています。

(ランダムID == someOtherId)であれば、再び同じプロセスを実行します。

0

あなたは常にユニークで取得するのはとても簡単です。このため、デバイスのIMEI番号を、使用することをお勧めします。

上記の権限をマニフェストファイルに追加し、次に2行を使用してIMEIを取得します。

TelephonyManager mngr = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE); 
long id = Long.parseLong(mngr.getDeviceId()); 
関連する問題