2016-08-01 5 views
0

Ich erstelle eine HashMap, indem ich die Werte nacheinander ablege. Wenn ich die hashmap nach jeder Iteration ausgedruckt habe, enthält die resultierende Hashmap den gleichen Wert für alle Schlüssel. Ich verstehe nicht, warum das passiert. Ich habe die Ausgabe unterHashMap-Werte, die in allen Schlüsseln ersetzt werden

eingefügt

HashMap (String, List (Object)) mRestriktions;

   for(int k = 0; k < jArr.length(); k++){ 

        Log.d(TAG,"inner Key:- "+jArr.getString(k)+" Values:- "+jObj.get(jArr.getString(k))); 

         list.clear(); 
         list.add(0,jObj.get(jArr.getString(k))); 
         //Log.d(TAG, "Existing List:- "+list); 

         mRestrictions.put(jArr.getString(k),list); 
         Log.d(TAG, "One by One Restrictions:- "+mRestrictions); 

       } 

Ausgang: -

One by One Einschränkungen: - {profile_name = [Test1]}

One by One Einschränkungen: - {profile_name = [url], url = [url}

One by One Einschränkungen: - {profile_name = [0], action = [0], url = [0]}

One by One Einschränkungen: - {profile_name = [Zertifikat], action = [Zertifikat] , authentication_type = [Zertifikat], ur l = [Zertifikat]}

One by One Einschränkungen: - {profile_name = [ranjith], authentication_type = [ranjith] username = [ranjith], action = [ranjith], url = [ranjith]}

+0

Welche Sprache ist das? Java? Bitte passend etikettieren. – duffymo

+0

Können Sie uns die Definition von 'JArr' zeigen? Es sieht so aus, als wäre es ein Fehler in der Implementierung. – templatetypedef

+0

jArr ist ein jsonArray, jArr: - ["profile_name", "url", "action", "authentication_type", "Benutzername"] –

Antwort

3

Wahrscheinlich Das Problem ist, dass Sie das gleiche List-Objekt innerhalb der Schleife verwenden.

Versuchen Sie, Ihre Deklaration des List-Objekts (Listenvariable) in die Schleife zu verschieben, anstatt .clear aufzurufen.

Sie haben jedes Mal dasselbe Objekt zu allen Schlüsseln hinzugefügt, da Java Objekte als Referenz übergibt.

3
list.clear(); 
list.add(0,jObj.get(jArr.getString(k))); 

Dies tut nicht, was Sie denken, dass es tut. Java übergibt Referenzen nach Wert. Diese Zeile löscht die Listen, die überall sonst schon eingefügt wurden. So wie Sie es geschrieben haben, ist nur eine Liste, die Sie alle diese Schlüssel zugeordnet haben.

Stattdessen müssen Sie jedes Mal eine neue Liste erstellen. Sie können dieselbe Liste nicht erneut verwenden.

+0

Danke Louis. Mir war das klare() nicht bewusst, das die Werte überall löscht. –