So senden Sie einen Hashmap-Wert mit einer Absicht an eine andere Aktivität

76

Wie sende HashMapich einen Wert von einer Absicht zur zweiten Absicht?

Wie kann dieser HashMapWert in der zweiten Aktivität abgerufen werden ?

Piyush
quelle
1
Hallo, du sendest welchen Wert (int, string, double ..)?
Naresh
bedeutet Zeichenfolge Wert, den ich senden möchte
Piyush
@Piyush .. zusätzlich JesusFrekes Antwort dies tun, um Werte zu erhalten, String [] val = new String [hashMap.size]; (hasMap.values) .toArray (val);
Ngesh
Wir können keine Hash-Map direkt per Absicht senden. Für die alternative Erstellung von zwei Array-Listen dient eine zum Halten von Schlüsseln und die andere zum Halten von Werten. Senden Sie nun diese beiden Array-Listen per Intent. In der anderen Klasse erhalten Sie zwei Array-Listen. Erstellen Sie nun eine leere Hashmap und fügen Sie den Schlüsselwert hinzu. Um eine Schlüssel- und Werteschleife für Ihre Schlüssel-Arrayliste zu erhalten, erhalten Sie einen Wert aus der Werte-Arrayliste.
ilango j

Antworten:

201

Die HashMap-Klasse von Java erweitert die SerializableSchnittstelle, wodurch es einfach ist, sie mithilfe der Intent.putExtra(String, Serializable)Methode einer Absicht hinzuzufügen .

In dem Aktivitäts- / Dienst- / Rundfunkempfänger, der die Absicht empfängt, rufen Sie dann Intent.getSerializableExtra(String)mit dem Namen auf, den Sie mit putExtra verwendet haben.

Zum Beispiel beim Senden der Absicht:

HashMap<String, String> hashMap = new HashMap<String, String>();
hashMap.put("key", "value");
Intent intent = new Intent(this, MyOtherActivity.class);
intent.putExtra("map", hashMap);
startActivity(intent);

Und dann in der empfangenden Aktivität:

protected void onCreate(Bundle bundle) {
    super.onCreate(savedInstanceState);

    Intent intent = getIntent();
    HashMap<String, String> hashMap = (HashMap<String, String>)intent.getSerializableExtra("map");
    Log.v("HashMapTest", hashMap.get("key"));
}
JesusFreke
quelle
25
Beachten Sie, dass HashMaps serialisiert werden. Karten anscheinend nicht.
R Earle Harris
5
Map ist eine Schnittstelle - Sie können eine Schnittstelle nicht serialisieren, sondern nur eine bestimmte Implementierung. In diesem Fall implementiert / erweitert Map die Serializable-Schnittstelle nicht selbst. Es liegt also an der spezifischen Implementierung, ob Serializable implementiert werden soll oder nicht. Und HashMap implementiert es.
JesusFreke
1
Hallo, ich sende eine HashMap <String, Object> als serialisierbares Extra aus einer Aktivität, die ich als Ergebnis einer anderen Aktivität gestartet habe. Also gebe ich eine Absicht zum Ergebnis zurück. Wenn ich versuche, die HashMap aus der Absicht abzurufen, (HashMap <String, Object>) intent.getSerializableExtra ("map"); gibt null zurück. Liegt es daran, dass ich HashMap <String, Object> verwende oder dass ich es von einer Aktivität sende, die für das Ergebnis einer anderen Aktivität erstellt wurde?
Marienke
1
@marienke Ich habe HashMap <String, Object> auf diese Weise in meinem Projekt verwendet und es funktioniert gut. Ich denke, Ihr Problem ist wahrscheinlich das letztere, viel Glück.
Uncii
3
Auf diese Weise erhalte ich eine Warnmeldung
Skynet,
5

Ich hoffe das muss auch funktionieren.

in der Sendeaktivität

Intent intent = new Intent(Banks.this, Cards.class);
intent.putExtra("selectedBanksAndAllCards", (Serializable) selectedBanksAndAllCards);
startActivityForResult(intent, 50000);

in der empfangenden Aktivität

Intent intent = getIntent();
HashMap<String, ArrayList<String>> hashMap = (HashMap<String, ArrayList<String>>) intent.getSerializableExtra("selectedBanksAndAllCards");

Wenn ich eine HashMap wie folgt sende,

Map<String, ArrayList<String>> selectedBanksAndAllCards = new HashMap<>();

Hoffe es würde jemandem helfen.

Janitha Prabath Madushanka
quelle