Глобальная переменная расширяет класс приложения

Поэтому я пытаюсь расширить базуApplication Класс и добавить переменные-члены для создания глобальных переменных, как в первом решении по ссылке ниже.

Глобальная переменная Android

Это работает, если переменная-член имеет простой тип данных, такой какString илиBoolean, Но как бы вы сделали это для более сложного типа данных? В моем случае я хотел бы, чтобы переменная-член имела типHashMap<String, Boolean>.

Я устанавливаю три переменные-члены вonActivityResult() (логическое,StringиHashMap<String, Boolean>), и я пытаюсь получить доступ к этим переменным-членам вonClick() метод кнопкиonClickListener, Когда я обращаюсь к строковым и логическим переменным, их значения устанавливаются соответствующим образом. Однако, когда я получаю доступ кHashMap<String, Boolean> переменная, ее значение установлено как «{}», пустойHashMap, Есть ли какая-тоSerialization что должно произойти со сложным типом данных?

Я также добавилArrayList<Boolean> в качестве переменной-члена, и когда я получил доступ к этой переменной вonclick() Метод был установлен правильно. Возможно, HashMaps должны быть установлены по-другому. Я не слишком уверен в этом.

В приведенном ниже коде я просто показываю урезанную версию, которая включает толькоHashMap переменная-член.

Вот мой подклассApplication

<code>public class MyApp extends Application {
  private HashMap<String, Boolean> selectedContacts = null;

  public HashMap<String, Boolean> getSelectedContacts() {
    return this.selectedContacts;
  }

  public void setSelectedContacts(HashMap<String, Boolean> sc) {
    this.selectedContacts = sc;
  }
}
</code>

Ниже приведены методыonActivityResult() а такжеonClick() в моем мессенджереActivity, ВonActivityResult()Я установил закрытую переменную-член класса MyApp. вonClick() метод, я вызываю метод доступа.

<code>public void onActivityResult(int reqCode, int resultCode, Intent data) {
  super.onActivityResult(reqCode, resultCode, data);

  switch (reqCode) {
    case R.integer.contact_manager:

      if (resultCode == RESULT_CANCELED)
        Log.d(getString(R.string.debug_tag), "FAILURE");
      if (resultCode == RESULT_OK) {
        Log.d(getString(R.string.debug_tag), "SUCCESS");

        MyApp appState = ((MyApp)getApplication());

        appState.setSelectedContacts((HashMap<String, Boolean>) data.getSerializableExtra("selectedContacts")); 
      }

      break;
   } 
}  


add_contact_button.setOnClickListener(new OnClickListener() {
  public void onClick(View v) {

    Intent i = new Intent(Messenger.this, ContactManager.class);

    MyApp appState = ((MyApp)getApplication());
    HashMap<String, Boolean> sc = appState.getSelectedContacts();   

    if (sc != null) {
      int totalContacts = sc.size();
      if(totalContacts > 0) {
        Bundle bundle = new Bundle();
        bundle.putSerializable("selectedContacts",sc); 
        i.putExtras(bundle);
      } 
    }
    startActivityForResult(i, R.integer.contact_manager);

  }
});
</code>

Ответы на вопрос(1)

Ваш ответ на вопрос