Сохранить ArrayList в SharedPreferences - PullRequest
290 голосов
/ 14 августа 2011

У меня есть ArrayList с пользовательскими объектами. Каждый пользовательский объект содержит различные строки и числа. Мне нужно, чтобы массив оставался без присмотра, даже если пользователь покидает активность и затем хочет вернуться позже, однако мне не нужен массив, доступный после того, как приложение было полностью закрыто. Таким образом я сохраняю множество других объектов, используя SharedPreferences, но не могу понять, как сохранить весь массив таким образом. Это возможно? Может быть, SharedPreferences не способ пойти по этому поводу? Есть ли более простой способ?

Ответы [ 33 ]

0 голосов
/ 25 марта 2015
    public  void saveUserName(Context con,String username)
    {
        try
        {
            usernameSharedPreferences= PreferenceManager.getDefaultSharedPreferences(con);
            usernameEditor = usernameSharedPreferences.edit();
            usernameEditor.putInt(PREFS_KEY_SIZE,(USERNAME.size()+1)); 
            int size=USERNAME.size();//USERNAME is arrayList
            usernameEditor.putString(PREFS_KEY_USERNAME+size,username);
            usernameEditor.commit();
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }

    }
    public void loadUserName(Context con)
    {  
        try
        {
            usernameSharedPreferences= PreferenceManager.getDefaultSharedPreferences(con);
            size=usernameSharedPreferences.getInt(PREFS_KEY_SIZE,size);
            USERNAME.clear();
            for(int i=0;i<size;i++)
            { 
                String username1="";
                username1=usernameSharedPreferences.getString(PREFS_KEY_USERNAME+i,username1);
                USERNAME.add(username1);
            }
            usernameArrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line, USERNAME);
            username.setAdapter(usernameArrayAdapter);
            username.setThreshold(0);

        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }
0 голосов
/ 09 июля 2015

Все вышеприведенные ответы верны.:) Я сам использовал один из них для моей ситуации.Однако, когда я прочитал вопрос, я обнаружил, что ОП на самом деле говорит о сценарии, отличном от заголовка этого поста, если я не понял его неправильно.

"Мне нужен массив для прикреплениядаже если пользователь покидает действие и затем хочет вернуться позже "

Он на самом деле хочет, чтобы данные сохранялись до тех пор, пока приложение не будет открыто, независимо от смены экрана пользователем в приложении.,

"однако мне не нужен массив, доступный после полного закрытия приложения"

Но после закрытия приложения данные не должны сохраняться.чувствовать, что использование SharedPreferences не является оптимальным способом для этого.

Что можно сделать для этого требования, так это создать класс, который расширяет класс Application.

public class MyApp extends Application {

    //Pardon me for using global ;)

    private ArrayList<CustomObject> globalArray;

    public void setGlobalArrayOfCustomObjects(ArrayList<CustomObject> newArray){
        globalArray = newArray; 
    }

    public ArrayList<CustomObject> getGlobalArrayOfCustomObjects(){
        return globalArray;
    }

}

Использование метода setПолучатель ArrayList может быть доступен из любого места в приложении.И что самое приятное, когда приложение закрывается, нам не нужно беспокоиться о сохранении данных.:)

0 голосов
/ 03 октября 2015

Очень просто использовать getStringSet и putStringSet в SharedPreferences , но в моем случае мне нужно продублировать объект Set, прежде чем я смогу добавить что-либо в Set.В противном случае набор не будет сохранен, если мое приложение будет принудительно закрыто.Вероятно, из-за примечания ниже в API ниже.(Сохраняется, если приложение закрывается кнопкой назад).

Обратите внимание, что нельзя изменять экземпляр набора, возвращаемый этим вызовом.Согласованность хранимых данных не гарантируется, если вы это делаете, и ваша способность изменять экземпляр вообще не гарантируется.http://developer.android.com/reference/android/content/SharedPreferences.html#getStringSet

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
SharedPreferences.Editor editor = prefs.edit();

Set<String> outSet = prefs.getStringSet("key", new HashSet<String>());
Set<String> workingSet = new HashSet<String>(outSet);
workingSet.add("Another String");

editor.putStringSet("key", workingSet);
editor.commit();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...