LinkedHashSet faz ordem de inserção não principal?

AndroidAnton:

Estou actualmente a construir um aplicativo Android onde eu exibir citações de pessoas famosas. Eu tenho uma tela inicial e 2 outras telas, onde eu estou exibindo todas as citações e outro onde eu mostrar citações favoritas.

Então, quando eu bati o como a tecla na tela do AllQuotesActivity a citação e autor serão salvos em uma LinkedHashSet, que será guardada na SharedPreferences, então minha FavouriteQuotes Atividade pode obter os dados. Eu posso obter os dados, mas os dados são misturados, embora outros links dizer que LinkedHashSet mantém a ordem de inserção. Talvez eu tenha feito algo errado. Aqui estão os trechos de código importantes:

AllQuotesActivity.java:

SharedPreferences sharedPref;
Set<String> set = new LinkedHashSet();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.all_quotes);

    Resources res = getResources();
    Context context = getApplicationContext();
    this.sharedPref = context.getSharedPreferences(
            "MyPref", Context.MODE_PRIVATE);
    final String[] quotesAndAuthors = res.getStringArray(R.array.quotes);

    button3.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            set.add(quotesAndAuthors[counter]);
            set.add(quotesAndAuthors[counter + 1]);
        }
    });

}

@Override
public void onPause() {
    super.onPause();
    Log.d("RichQuotes", "Its paused mkay");

    Editor editor = sharedPref.edit();

    editor.putStringSet("quotesAndAuthors", this.set);
    editor.commit();
}

}

FavouriteQuotesActivity.java:

SharedPreferences sharedPref;
Set<String> set = new LinkedHashSet();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.favourite_quotes);

    Resources res = getResources();
    Context context = getApplicationContext();
    this.sharedPref = context.getSharedPreferences(
            "MyPref", Context.MODE_PRIVATE);

    set = sharedPref.getStringSet("quotesAndAuthors", null);

    for (Iterator<String> it = set.iterator(); it.hasNext(); ) {
        String s = it.next();
        Log.v("test", s);
    }

Tirei código desnecessário.

No FavouriteQuotesActivity.java Estou registrando o conjunto para verificar os seus valores. Os log-saídas e as saídas na tela são os mesmos, tanto indiferenciado da mesma maneira.

Basil Bourque:

Conjunto de conjunto = novo LinkedHashSet ();

Nesta linha, você instanciar um novo vazio LinkedHashSetobjeto. Este objeto foi então atribuído à variável chamada set.

set = sharedPref.getStringSet ( "quotesAndAuthors", null);

Nesta linha, você reafectados a setvariável para apontar para algum outro objeto, algum Setobjeto retornado por sua chamada para getStringSet. Nós não sabemos a classe concreta deste segundo objeto que implementa a Setinterface. Você pode perguntar pelo telefone getClass.

Seu primeiro set, o vazio LinkedHashSet, não foram utilizados. Com nenhuma outra referência apontando para ele, esse conjunto se tornou um candidato para eventual coleta de lixo.

Acho que você gosta

Origin http://43.154.161.224:23101/article/api/json?id=362897&siteId=1
Recomendado
Clasificación