Urządzenie android.os.Message
używa Bundle
do wysyłania przy użyciu metody sendMessage. Dlatego czy możliwe jest umieszczenie HashMap
wewnątrz Bundle
?Android HashMap w pakiecie?
Odpowiedz
try jak:
Bundle extras = new Bundle();
extras.putSerializable("HashMap",hashMap);
intent.putExtras(extras);
aw drugim Aktywny
Bundle bundle = this.getIntent().getExtras();
if(bundle != null) {
hashMap = bundle.getSerializable("HashMap");
}
ponieważ Hashmap domyślnie narzędzi Serializable
więc można przekazać go za pomocą putSerializable
w Bundle i dostać w innej aktywności za pomocą getSerializable
Otrzymuję komunikat o błędzie, gdy próbuję serializować powiązaną mapę haszującą Parcel: nie można marnować wartości com .SGID.DataClass.InvalidSubscriptionReasonsData @ 41bd2b98 –
Jak mogę uzyskać dostęp do tego serializowalnego obiektu Hash_Map ??? –
@Rani: nadal otrzymujesz problem lub rozwiązany? –
Zgodnie z doc, Hashmap
implementuje Serializable
, dzięki czemu można putSerializable
Chyba. Spróbowałeś?
Jeśli chcesz wysłać wszystkie klucze w pakiecie, możesz spróbować
for(String key: map.keySet()){
bundle.putStringExtra(key, map.get(key));
}
Jestem ciekawy, czy nie ma powodu, aby tego nie robić? Nie używałem zbyt wiele serializacji i nigdy nie pakowałem (nowe na Androida), więc jestem ciekawy, czy to jest O (n), a dołączanie do pakietu jest efektywnie O (1) czy nie. Jeśli nie różnią się one kosztem, nie widzą powodu, dla którego mielibyśmy kłopot z serializowaniem go na inną mapę. –
Uwaga: Jeśli używasz AppCompatActivity, trzeba będzie wywołać metodę protected void onSaveInstanceState(Bundle outState) {}
(NIEpublic void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {}
).
Przykład kod ...
Store mapa:
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putSerializable("leftMaxima", leftMaxima);
outState.putSerializable("rightMaxima", rightMaxima);
}
i odbierać go w onCreate:
if (savedInstanceState != null) {
leftMaxima = (HashMap<Long, Float>) savedInstanceState.getSerializable("leftMaxima");
rightMaxima = (HashMap<Long, Float>) savedInstanceState.getSerializable("rightMaxima");
}
Przepraszam, jeśli to jakiś duplikatu odpowiedzi - może ktoś będzie znaleźć to przydatne. :)
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;
}
Używam mojej kotlinskiej implementacji Parceli, aby to osiągnąć i jak na razie działa to dla mnie. Przydatne, jeśli chcesz uniknąć ciężkich serializacji.
także aby pracować polecam go używać z these
Deklaracji
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)
}
}
}
Zastosowanie
zapisu
val map = LinkedHashMap<Int, String>()
val wrap = ParcelableMap<Int,String>(map)
Bundle().putParcelable("your_key", wrap)
czytać
val bundle = fragment.arguments ?: Bundle()
val wrap = bundle.getParcelable<ParcelableMap<Int,String>>("your_key")
val map = wrap.map
nie należy zapominać, że jeśli mapa K,V
nie są zapakowane domyślnie muszą wdrożyć Parcelable
- 1. HashMap w HashMap
- 2. Android. GcmNetworkManager w pakiecie SDK Firebase?
- 3. Co oznacza "ICU" w pakiecie Android SDK?
- 4. Wyszukaj HashMap w ArrayList of HashMap
- 5. Jak przekonwertować HashMap na json Array w systemie Android?
- 6. Hashmap wektorów w Matlab
- 7. Przechowuj tablicę w HashMap
- 8. Persist HashMap w ORMLite
- 9. HashMap Problemy deserializacjia w Androidzie
- 10. : nie znaleziono identyfikatora zasobu dla atrybutu "showAsAction" w pakiecie Android
- 11. Gdzie są duże ikony w Pakiecie ikon paska narzędzi Android?
- 12. : Nie znaleziono identyfikatora zasobu dla atrybutu "textAlignment" w pakiecie "android"
- 13. Metoda zwracana przez HashMap
- 14. Wdrażanie HashMap
- 15. Pakiet Java w pakiecie?
- 16. Umieszczanie bitmapy w pakiecie
- 17. Skrypty w pakiecie Pythona
- 18. GetElementsByTagName w pakiecie Htmlagilitypack
- 19. Importowanie w pakiecie Pythona
- 20. Znajdź wszystkie zajęcia w pakiecie w Androidzie
- 21. Jak podzielić HashMap w Javie
- 22. Pętla poprzez "Hashmap" w JavaScript
- 23. Zamień dużą hashmap w AS
- 24. wartość Update w zmienny HashMap
- 25. Iterator nad HashMap w Javie
- 26. ArrayList jako klucz w Hashmap
- 27. Pierwsze pierwsze rzeczy w HashMap?
- 28. Dlaczego brakuje fragment_main.xml w pakiecie ADT 20140702?
- 29. Sprawdź, czy obiekt jest instancją String, HashMap lub HashMap []
- 30. Ignorowanie zależności w pakiecie Nuget
Java i Android początkujących 8) thnx dla wszystkich! –
Zaakceptuj każdą odpowiedź, jeśli rozwiążemy Twój problem. thx – AMerle
Rozwiązanie jest tutaj: [Android - jak przekazać HashMap między działaniami?] (http://stackoverflow.com/a/11155142/379693) –