Android ArrayList 已存储,未还原到已保存的排序顺序

问题描述 投票:0回答:2
  1. 我有一个myArrayList,该数组将按照保存的已排序顺序存储和恢复。但是代码没有做到这一点。为什么?

    ArrayList<String> myArrayList
    
    // save:
            SharedPreferences prefs = PreferenceManager
            .getDefaultSharedPreferences(getBaseContext());
    SharedPreferences.Editor edit;
    edit = prefs.edit();
    edit.putStringSet("mydata", new LinkedHashSet<String>(myArrayList));
    edit.commit();
    
        // read:
    myArrayList = new ArrayList<String>(PreferenceManager
            .getDefaultSharedPreferences(getBaseContext()).getStringSet(
                    "mydata", new LinkedHashSet<String>()));
    adapterAppList = new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_1, android.R.id.text1,
            myArrayList);
    
  2. 还有什么更好的方法可以存储myArrayList的值并还原回其原始保存的排序顺序?

android sorting arraylist sharedpreferences store
2个回答
0
投票

您可以使用gson将arrayList像字符串一样序列化

public ArrayList<String> convertToArrayList(String json) {
    Type type = new TypeToken<ArrayList<String>>(){}.getType();
    return new Gson().fromJson(json, type);
}

public String convertFromArrayList(ArrayList<String> list) {
    if (list == null) {
        list = new ArrayList<>();
    }
    return new Gson().toJson(list);
}

0
投票

HashSet不保留订单,它正在对其进行快速查找。您可以将列表转换为json并另存为字符串。在需要时,可以按顺序将其从json转换为ArrayList。示例:

String listAsString = new Gson().toJson(arrayList); //list to string
Arrays.asList(new Gson().fromJson(listAsString,String[].class)) //string to list

不要忘记将库添加到build.gradle:

dependencies {
  implementation 'com.google.code.gson:gson:2.8.6'
}
© www.soinside.com 2019 - 2024. All rights reserved.