2016-07-31 12 views
2

Ich habe eine HashMap (String, HashMap (String, Object)) in einer meiner Aktivität. Wie kann ich diese HashMap per Intent an eine andere Aktivität senden?Hashmap über Android Intents übergeben

Wie kann man diese HashMap zu Intent Extras hinzufügen?

+1

Sie können die Antwort hier finden: http://stackoverflow.com/a/4992465/4287861 –

+0

Die Kommentare und Antworten hier zeigen Ihnen, wie Sie die HashMap durch eine Absicht weitergeben, aber Sie sollten diese Gelegenheit nutzen, um sich zu fragen, ob Sie Ihre App besser gestalten könnten. Immer wenn Sie ein Serializable zwischen Aktivitäten "IMHO" weitergeben müssen, bedeutet dies, dass Sie möglicherweise ein schwaches "Modell" oder gar kein "Modell" haben.Nicht-triviale Apps sollten nicht nur Daten von Activity zu Activity weiterleiten, sondern auch ein von der UI getrenntes Modell implementieren und dieses Modell dann bei Bedarf in Aktivitäten einfügen. Siehe auch das MVC- oder MVP-Entwurfsmuster. – GreyBeardedGeek

Antwort

1

HashMap Senden

HashMap<String, Object> hashmapobject =new HashMap<>(); 
HashMap<String, Object> newhashMap=new HashMap<>(); 
hashmapobject.put("key",newhashMap); 

Intent intent = new Intent(SenderActivity.this, NextActivity.class); 
intent.putExtra("hashMapKey", hashmapobject); 
startActivity(intent); 

HashMap Empfangen

Intent intent = getIntent();  
HashMap<String, Object> hashMapObject = (HashMap<String, Object>)  intent.getSerializableExtra("hashMapKey"); 
HashMap<String, Object> newhashMap=(HashMap<String, Object>)hashMapObject.get("key"); 
+2

Sie müssen putSerializable() anstelle von putExtra() verwenden - http://StackOverflow.com/questions/11452859/android-hashmap-in-bundle – Vaiden

0

Es könnte mehrere Ansätze für Ihr Problem geben und jedes hängt davon ab, welchen Datentyp Sie in map speichern. Der einfachste Ansatz besteht darin, JSONObject von json.org als String zu verwenden und während des Empfangs zurück in JSON zu konvertieren. JSONObject verwendet eine LinkedHashMap-Komponente, sodass Sie die Funktionen von HashMap verwenden können.

JSONObject obj=new JSONObject(); 
obj.put("key1", "value1"); 
obj.put("key2", "value2"); 
obj.put("key3", "value3"); 
. 
. 
. 
obj.put("keyN", "valueN"); 

intent.putExtra("map", obj.toString()); 

Während

JSONObject obj=new JSONObject(getIntent().getStringExtra("map")); 

Für komplexe Datentypen empfangen versuchen, unter Berücksichtigung entweder JSON-Bibliotheken wie Gson oder Parcel Schnittstelle verwenden.

+1

Sie können die HashMap einfach übergeben, ohne sie zu JSON zu analysieren. HashMap implementiert standardmäßig die serialisierbare Schnittstelle, so dass Sie einfach verwenden können: intent.putExtra ("map", HashMap <>) und es zu lesen: getIntent () .getSerializableExtra ("map") –

+0

Ich habe meine Antwort aktualisiert Ran –

0

Hallo können Sie Parcel verwenden:

schreiben Klasse wie folgt:

public class Person implements Parcelable { 
String name; 
int age; 
Date brithDate; 

public Person(String name, int age, Date brithDate) { 
    this.name = name; 
    this.age = age; 
    this.brithDate = brithDate; 
} 

@Override 
public int describeContents() { 
    return 0; 
} 

@Override 
public void writeToParcel(Parcel dest, int flags) { 
    dest.writeString(this.name); 
    dest.writeInt(this.age); 
    dest.writeLong(brithDate != null ? brithDate.getTime() : -1); 
} 

protected Person(Parcel in) { 
    this.name = in.readString(); 
    this.age = in.readInt(); 
    long tmpbrithDate = in.readLong(); 
    this.brithDate = tmpbrithDate == -1 ? null : new Date(tmpbrithDate); 
} 

public static final Parcelable.Creator<Person> CREATOR = new Parcelable.Creator<Person>() { 
    public Persona createFromParcel(Parcel source) { 
     return new Person(source); 
    } 

    public Person[] newArray(int size) { 
     return new Person[size]; 
    } 
}; 

zusätzliche Put:

intent.putExtra("person", new Person("Ahmad",34,date)); 

Get:

Bundle data = getIntent().getExtras(); 
Person person= (Person) data.getParcelable("person"); 

oder Sie können diese Seite kopieren Klasse und konvertieren zu Parcel Klasse:

http://www.parcelabler.com/

OR können Sie diese Bibliothek Hrisey

https://github.com/mg6maciej/hrisey/wiki/Parcelable#details verwenden

Oder können Sie Android Studio hat für diesen Plugins verwenden:

  • Android Parcelable code generator (Apache License 2.0)
  • Auto Parcel (die MIT-Lizenz)
  • SerializableParcelable Generator (die MIT-Lizenz)
  • Parcel Code-Generator (für Kotlin) (Apache-Lizenz 2.0)