Search code examples
androidsortingarraylistsharedpreferencesstore

Android ArrayList<String> stored not restored back to its saved sorted order


  1. I have an myArrayList which is to be stored and restored back in its saved sorted order. But the code does not do that. Why?

    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. Is there any better way I can store the value of myArrayList and restored back to its original saved sorted order?


Solution

  • You can serialize arrayList like string:

    1 with gson

    public ArrayList<String> convertToArrayList(String json) {
        if (TextUtils.isEmpty(json)){
            return null; // or new ArrayList<>()
        }
        Type type = new TypeToken<ArrayList<String>>(){}.getType();
        return new Gson().fromJson(json, type);
    }
    public String convertFromArrayList(ArrayList<String> list) {
        if (list == null){
            return null;
        }
        return new Gson().toJson(list);
    }
    

    2 without gson

    public ArrayList<String> convertToArrayList(String st) {
        if (!TextUtils.isEmpty(st)){
            String[] str = st.split(",");
            if (str.length > 0){
                return new ArrayList<>(Arrays.asList(str));
            }
        }
        return null;
    }
    public String convertFromArrayList(ArrayList<String> list) {
        if (list!=null && !list.isEmpty()){
            return TextUtils.join(",", list);
        }
        return null;
    }