如何从首选项中保存arrayList

时间:2017-02-27 08:59:47

标签: java android arrays

我尝试从sharedPreferences获取我保存的记录,但我不能。一无所获。

LostDialogFragment我保存数组,我调试这个,这总是保存数据。我从MainGameFragment

获得参考资料
 public void saveArray() {
    SharedPreferences prefs = getContext().getSharedPreferences("user_and_score", Context.MODE_PRIVATE);
    SharedPreferences.Editor edit = prefs.edit();
    Set<String> set = new HashSet<>();
    set.addAll(MainGameFragment.LEADERBOARDUSER);
    edit.putStringSet("user_and_score", set);
    edit.apply();
}

以下是MainGameFragment

中的参考资料
 public static ArrayList<String> LEADERBOARDUSER = new ArrayList<>();

SettingsFragment中,我尝试获取已保存的数组

 private ArrayList<String> leaderBoardList = new ArrayList<>();


case LEADER_BOARD:
            recyclerView.setVisibility(View.VISIBLE);
            SharedPreferences prefs = getContext().getSharedPreferences("user_and_score", Context.MODE_PRIVATE);
            SharedPreferences.Editor edit = prefs.edit();
            Set<String> set = new HashSet<>();
            edit.putStringSet("user_and_score", set);
            set.addAll(leaderBoardList);
            edit.apply();
            adapter = new CustomAdapterForSettingsFragment(leaderBoardList);
            recyclerView.setAdapter(adapter);
            break;

我的问题是如何获得保存的数组?

或者我没有保存。我现在正在调试,没有人保存,请帮助我在共享中保存数组

5 个答案:

答案 0 :(得分:1)

要保存设置问题,请尝试以下操作: - 1.)提供一些不同的密钥来保存您的设置,例如

 edit.putStringSet("your_set", set);

2。)使用

 edit.commit()

要获得你的Set,请尝试以下方法: -

SharedPreferences prefs = getContext().getSharedPreferences("user_and_score", Context.MODE_PRIVATE);

Set<String> newSet = prefs.getStringSet("your_set", new HashSet<String>());

通过执行此操作,您可以在newSet中获取已保存的集。 感谢!!!

答案 1 :(得分:0)

您可以在Save ArrayList to SharedPreferences找到答案。

我认为你有问题
edit.apply();

尝试

edit.commit();

答案 2 :(得分:0)

试试这个,

dependencies {
    compile 'com.google.code.gson:gson:2.2.+'
}       

设置值

List<String> leaderBoardList   = new ArrayList<>();

Gson gson = new Gson();
String jsonText = gson.toJson(leaderBoardList);
prefsEditor.putString("key", jsonText);
prefsEditor.commit();

检索值

List<String> leaderBoardList   = new ArrayList<>();
Gson gson = new Gson();
String jsonText = Prefs.getString("key", null);
String[] text = gson.fromJson(jsonText, String[].class);  //EDIT: gso to gson

leaderBoardList  = Arrays.asList(text);
leaderBoardList  = new ArrayList(leaderBoardList );

答案 3 :(得分:0)

我遇到了与共享首选项类似的问题,我无法获得以前保存的字符串。

对我有用的解决方案是通过PreferenceManager获取SharedPrefs实例:

SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this.getApplicationContext());

然后获取字符串集:

Set<String> set = sharedPref.getStringSet("your_set", new HashSet<String>());

答案 4 :(得分:0)

最好的方法是:

1)将您的列表转换为JsonArray说jsonArrayPref

2)将jsonArrayPref.toString()保存到共享首选项

3)什么时候你想要那个List然后以字符串形式从首选项中获取jsonArrayPref

4)然后将其转换为JsonArray并渲染数据并使用它