Estoy construyendo una aplicación para Android, donde puedo mostrar citas de personajes famosos. Tengo una pantalla de inicio y otras 2 pantallas, en los que estoy mostrando todas las citas y la otra donde exhibo citas favoritas.
Por lo tanto, cuando pulso el botón en la pantalla de AllQuotesActivity la cita y el autor se guardarán en un LinkedHashSet, que se guardará en SharedPreferences, por lo que mi FavouriteQuotes Actividad puede obtener los datos similares. Puedo obtener los datos, pero los datos se mezcla, a pesar de que otros enlaces dicen que LinkedHashSet mantiene el orden de inserción. Tal vez hice algo mal. Estos son los fragmentos 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);
}
Quité el código innecesario.
En el FavouriteQuotesActivity.java estoy tala del juego para comprobar sus valores. El diario de salidas y las salidas en la pantalla son los mismos, tanto desordenada de la misma manera.
conjunto set = nuevo LinkedHashSet ();
En esta línea, se instancia un nuevo vacío LinkedHashSet
objeto. A continuación, este objeto se le asigna a la variable llamada set
.
SET = sharedPref.getStringSet ( "quotesAndAuthors", null);
En esta línea, se reasignen la set
variable para el punto a algún otro objeto, algunos Set
objeto devuelto por la llamada a getStringSet
. No sabemos la clase concreta de este segundo objeto que implementa la Set
interfaz. Usted puede pedir llamando getClass
.
Su primer conjunto, el vacío LinkedHashSet
, no se utilizó. Sin otras referencias apuntando hacia él, ese conjunto se convirtió en un candidato para la recolección de basura eventual.