Як надіслати значення хеш-карти до іншої діяльності за допомогою наміру


77

Як надіслати HashMapзначення з одного наміру на другий намір?

Крім того, як отримати це HashMapзначення під час другої діяльності?


1
Привіт, ви надсилаєте яке значення (int, string, double ..)?
naresh

означає значення рядка, яке я хочу надіслати
Піюш

@Piyush .. Крім того, відповідь JesusFreke робить це, щоб отримати значення, String [] val = new String [hashMap.size]; (hasMap.values) .toArray (val);
ngesh

ми не можемо надсилати хеш-карту безпосередньо за наміром. В якості альтернативи можна створити два списки масивів, один - утримувати ключі, а інший - зберігати значення. Тепер надішліть ці два списки масивів за наміром, в іншому класі ви отримаєте два списки масивів, тепер створіть порожню хеш-карту та додайте ключ, значення. Щоб отримати цикл ключів і значень, ваш ключ-аргумент для відповідного ключа отримує значення із списку значень-аргументів.
ilango j

Відповіді:


203

Клас HashMap Java розширює Serializableінтерфейс, що полегшує додавання його до наміру за допомогою Intent.putExtra(String, Serializable)методу.

У приймачі активності / послуги / трансляції, який отримує намір, ви потім телефонуєте Intent.getSerializableExtra(String)з іменем, яке ви використовували з putExtra.

Наприклад, під час надсилання наміру:

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);

А потім у приймальній діяльності:

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"));
}

25
Зверніть увагу, що HashMaps серіалізується. Карт, мабуть, немає.
R Earle Harris

6
Map - це інтерфейс - ви не можете серіалізувати інтерфейс, лише його конкретна реалізація. У цьому випадку Map не реалізує / не розширює сам інтерфейс Serializable, тому залежить від конкретної реалізації, чи хоче він реалізовувати Serializable чи ні. І HashMap це реалізує.
JesusFreke

1
Привіт, я надсилаю HashMap <String, Object> як серіалізується додатковий елемент із Діяльності, яку я розпочав для результату іншої діяльності. Тож я повертаю намір на результат. Коли я намагаюся отримати HashMap з наміру, (HashMap <String, Object>) intent.getSerializableExtra ("map"); повертає null. Це тому, що я використовую HashMap <String, Object>, або тому, що я надсилаю його з Activity, створеного для результату з іншого Activity?
marienke

1
@marienke Я використовував HashMap <String, Object> таким чином у своєму проекті, і він працює нормально. Я думаю, ваше питання, мабуть, останнє, удачі.
unrecii

3
Я отримую попередження про кидок таким чином
Skynet

6

Я сподіваюся, це теж має спрацювати.

в роботі надсилання

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

в приймальній діяльності

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

коли я надсилаю HashMap, як показано нижче,

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

Сподіваюся, це комусь допоможе.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.