Il android.os.Message
utilizza un Bundle
da inviare con il metodo sendMessage. Pertanto, è possibile inserire uno HashMap
all'interno di uno Bundle
?HashMap Android in bundle?
risposta
prova come:
Bundle extras = new Bundle();
extras.putSerializable("HashMap",hashMap);
intent.putExtras(extras);
e nella seconda attività
Bundle bundle = this.getIntent().getExtras();
if(bundle != null) {
hashMap = bundle.getSerializable("HashMap");
}
perché Hashmap da strumenti predefiniti Serializable
in modo da poter passare utilizzando putSerializable
in bundle ed entrare in altre attività utilizzando getSerializable
Viene visualizzato un errore quando provo a serializzare la mappa hash collegata. Parcel: impossibile eseguire il marshall value com .SGID.DataClass.InvalidSubscriptionReasonsData @ 41bd2b98 –
Come posso accedere a questo oggetto serializzabile Hash_Map ??? –
@Rani: ancora problema o risolto? –
Secondo lo doc, Hashmap
strumenti Serializable
, quindi è possibile putSerializable
Immagino. Hai provato ?
Se si desidera inviare tutte le chiavi nel pacchetto, è possibile provare
for(String key: map.keySet()){
bundle.putStringExtra(key, map.get(key));
}
Sono curioso di sapere se c'è qualche ragione per non farlo? Non ho usato molto la serializzazione e mai pacchetti (nuovi per Android), quindi sono curioso di sapere se questo è O (n) e l'aggiunta a un pacchetto è effettivamente O (1) o no. Se non sono diversi nei costi, non vedendo il motivo per cui dovresti preoccuparti di serializzarlo su un'altra mappa. –
Nota: Se si utilizza un AppCompatActivity, si dovrà chiamare il metodo protected void onSaveInstanceState(Bundle outState) {}
(NONpublic void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {}
).
codice di esempio ...
Conservare la mappa:
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putSerializable("leftMaxima", leftMaxima);
outState.putSerializable("rightMaxima", rightMaxima);
}
E riceverlo in onCreate:
if (savedInstanceState != null) {
leftMaxima = (HashMap<Long, Float>) savedInstanceState.getSerializable("leftMaxima");
rightMaxima = (HashMap<Long, Float>) savedInstanceState.getSerializable("rightMaxima");
}
scusate se è una specie di risposta duplicato - forse qualcuno trovalo utile :)
public static Bundle mapToBundle(Map<String, Object> data) throws Exception {
Bundle bundle = new Bundle();
for (Map.Entry<String, Object> entry : data.entrySet()) {
if (entry.getValue() instanceof String)
bundle.putString(entry.getKey(), (String) entry.getValue());
else if (entry.getValue() instanceof Double) {
bundle.putDouble(entry.getKey(), ((Double) entry.getValue()));
} else if (entry.getValue() instanceof Integer) {
bundle.putInt(entry.getKey(), (Integer) entry.getValue());
} else if (entry.getValue() instanceof Float) {
bundle.putFloat(entry.getKey(), ((Float) entry.getValue()));
}
}
return bundle;
}
Sto utilizzando la mia implementazione kotlin di Parcelable per ottenere ciò e finora funziona per me. Utile se si vuole evitare la serializzazione pesante.
Anche al fine di lavorare vi consiglio di utilizzarlo con these
Dichiarazione
class ParcelableMap<K,V>(val map: MutableMap<K,V>) : Parcelable {
constructor(parcel: Parcel) : this(parcel.readMap(LinkedHashMap<K,V>()))
override fun writeToParcel(parcel: Parcel, flags: Int) {
parcel.writeMap(map)
}
override fun describeContents(): Int {
return 0
}
companion object CREATOR : Parcelable.Creator<ParcelableMap<Any?,Any?>> {
@JvmStatic
override fun createFromParcel(parcel: Parcel): ParcelableMap<Any?,Any?> {
return ParcelableMap(parcel)
}
@JvmStatic
override fun newArray(size: Int): Array<ParcelableMap<Any?,Any?>?> {
return arrayOfNulls(size)
}
}
}
Usa
scrittura
val map = LinkedHashMap<Int, String>()
val wrap = ParcelableMap<Int,String>(map)
Bundle().putParcelable("your_key", wrap)
leggere
val bundle = fragment.arguments ?: Bundle()
val wrap = bundle.getParcelable<ParcelableMap<Int,String>>("your_key")
val map = wrap.map
Non dimenticate che se la vostra mappa K,V
non sono parcellizzata di default devono implementare Parcelable
- 1. ID bundle in Android
- 2. HashMap Problemi deserializzazione in Android
- 3. Converti mappa in bundle in android
- 4. Come memorizzare HashMap su Android?
- 5. Test unità Android: Bundle/Parcelable
- 6. Persist HashMap in ORMLite
- 7. Quando utilizzare ArrayMap di Android anziché HashMap?
- 8. Come ordinare HashMap come aggiunto in Android con ArrayAdapter
- 9. Double in HashMap
- 10. per HashMap in java
- 11. Risoluzione collisione in HashMap
- 12. Android | Unmarshalling tipo sconosciuto durante l'utilizzo Parcelable dati in bundle
- 13. Metodo di restituzione HashMap
- 14. Profilazione HashMap
- 15. Serializzabilità HashMap
- 16. Verifica esistenza chiave in HashMap
- 17. Iterator su HashMap in Java
- 18. Metodo putTreeVal() in HashMap JDK8
- 19. Java: chiave composta in hashmap
- 20. Java mettere hashmap in Treemap
- 21. come analizzare xml in hashmap?
- 22. Conversione di HashMap in ArrayList
- 23. HashMap in gestore di persistenza
- 24. ArrayList come chiave in Hashmap
- 25. Differenza tra installazione bundle e bundle
- 26. Differenza tra $ Bundle installare e $ Bundle aggiornare
- 27. Monodroid che mette oggetti raggruppabili in bundle
- 28. MVC4 in bundle con TinyMCE
- 29. Bundle nidificati in ASP.NET MVC
- 30. Cosa c'è onCreate (Bundle savedInstanceState)
Java e newbie Android 8) thnx a tutti! –
Accetta qualsiasi risposta se abbiamo risolto il tuo problema. thx – AMerle
La soluzione è qui: [Android - Come passare HashMap tra attività?] (http://stackoverflow.com/a/11155142/379693) –