Jeśli używasz API (jak poziom 8), gdzie cant wykorzystanie put/getStringSet(), to jest to możliwe rozwiązanie, ale to bardzo drogie i nie elastyczny jeśli chcesz przechowywać większe listy. Chodzi o to, że tworzenie mapy, takiej jak struktura danych dla prostej struktury tablicowej, powoduje ogromne obciążenie, jeśli ważna jest jej wydajność.
Aby ją zapisać:
public static void writeList(Context context, List<String> list, String prefix)
{
SharedPreferences prefs = context.getSharedPreferences("YourApp", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
int size = prefs.getInt(prefix+"_size", 0);
// clear the previous data if exists
for(int i=0; i<size; i++)
editor.remove(prefix+"_"+i);
// write the current list
for(int i=0; i<list.size(); i++)
editor.putString(prefix+"_"+i, list.get(i));
editor.putInt(prefix+"_size", list.size());
editor.commit();
}
Aby pobrać go:
public static List<String> readList (Context context, String prefix)
{
SharedPreferences prefs = context.getSharedPreferences("YourApp", Context.MODE_PRIVATE);
int size = prefs.getInt(prefix+"_size", 0);
List<String> data = new ArrayList<String>(size);
for(int i=0; i<size; i++)
data.add(prefs.getString(prefix+"_"+i, null));
return data;
}
I rzeczywiście go używać:
List<String> animals = new ArrayList<String>();
animals.add("cat");
animals.add("bear");
animals.add("dog");
writeList(someContext, animals, "animal");
i aby je odzyskać:
List<String> animals = readList (someContext, "animal");
Jeśli nie ograniczają się do korzystania z SharedPreferences, należy rozważyć użycie SQLiteDatabase!
Dzięki temu właśnie skończyłem używać, jestem pewien, że inne odpowiedzi też by działały. – Peter
Dobrze, byłoby łatwiej, zamiast komplikować sprawy za pomocą sharedprefereces w twoim przypadku. Powodzenia! – Ali
Mimo że to zadziała, preferencje udostępniania mają szczególną właściwość utrzymywania się do odinstalowania aplikacji, ale z drugiej strony, jeśli korzystamy z pamięci SD, będziemy musieli jawnie usunąć pliki. –