Variável global estende a classe de aplicativo

Então estou tentando estender a baseApplication class e adicione variáveis ​​de membro para criar variáveis ​​globais como nesta primeira solução do link abaixo.

Variável global do Android

Isso funciona se a variável de membro é um tipo de dados simples como umString ou umBoolean. Mas como você faria isso para um tipo de dados mais complexo? No meu caso eu gostaria que a variável de membro fosse do tipoHashMap<String, Boolean>.

Eu estou definindo três variáveis ​​membro emonActivityResult() (um booleano, umStringe umHashMap<String, Boolean>), e estou tentando acessar essas variáveis ​​de membro noonClick() método de um botãoonClickListener. Quando eu acesso as variáveis ​​string e booleanas, seus valores são definidos apropriadamente. No entanto, quando eu acessar oHashMap<String, Boolean> variável seu valor é definido como '{}', um vazioHashMap. Existe algum tipo deSerialization que precisa acontecer com um tipo de dados complexo?

Eu também adicionei umArrayList<Boolean> como uma variável membro e quando eu acessei esta variável noonclick() método foi definido corretamente. Possivelmente, o HashMaps deve ser definido de forma diferente. Eu não tenho certeza se é esse o ponto.

No código abaixo, estou mostrando apenas uma versão simplificada que inclui apenas oHashMap variável de membro.

Aqui está a minha subclasse deApplication

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

Abaixo estão os métodosonActivityResult() eonClick() no meu mensageiroActivity. EmonActivityResult(), Eu defino a variável de membro particular da classe MyApp. NoonClick() método, eu chamo o método de acesso.

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

questionAnswers(1)

yourAnswerToTheQuestion