【问题标题】:How to save the arrayList data in SharedPreferences? [duplicate]如何在 SharedPreferences 中保存 arrayList 数据? [复制]
【发布时间】:2023-03-09 08:55:01
【问题描述】:

我将ArrayList 的大小和数据保存在SharedPreferences 中。当我从SharedPreference 中检索ArrayList 大小时,无论之前保存的大小如何,它都会给出确切的大小。但是在这里我无法保存ArrayList 数据。当我检索ArrayList 数据时,它总是给出ArrayList 的最后一项。

这是我保存ArrayList 大小和数据的代码:

ArrayList<Items> mArrayList1 = new ArrayList<Items>();
if(mArrayList1 == 0){
    mStoreItem.setItem(id);
    mArrayList1.add(mStoreItem);
    int size = mArrayList1.size();
    System.out.println("array list size : " + size);
     MyPreferences.savePreferences(getActivity(),
                    "arraylist_size", Integer.toString(size));
    for (int i = 0; i < mArrayList1.size(); i++) {
       String id = mArrayList1.get(i)
                .getItem();
        MyPreferences.savePreferences(getActivity(),
                        "id", id);
            }
} else if(mArrayList1 > 0){
    mStoreItem.setItem(id);
    mArrayList1.add(mStoreItem);
    int size = mArrayList1.size();
    System.out.println("arrayList size : " + size);
     MyPreferences.savePreferences(getActivity(),
                    "arraylist_size", Integer.toString(size));
    for (int i = 0; i < mArrayList1.size(); i++) {
       String id = mArrayList1.get(i)
                .getItem();
        MyPreferences.savePreferences(getActivity(),
                        "id", id);
            }
}

在这里我正在检索我的 ArrayList 项目:

  String getListSize =  MyPreferences.savePreferences(getActivity(),
                    "arraylist_size");
System.out.println("arrayList size : " + getListSize);
    if (!getListSize.equals("")) {
        int listSize = Integer.parseInt(getListSize);

        if (listSize > 0) {
            for (int i = 0; i < listSize; i++) {
                String getListitems = MyPreferences
                        .getPreferences(getActivity(), "id");
   System.out.Println("list items : "+ getListItems);

            }
        }
    }

如何在SharedPreferences 中存储ArrayList 项目?

【问题讨论】:

标签: android arraylist sharedpreferences


【解决方案1】:

试试这个:

//Set the values
Set<String> set = new HashSet<String>();
set.addAll(mArrayList1);
scoreEditor.putStringSet("key", set);
scoreEditor.commit();

//Retrieve the values
Set<String> set = new HashSet<String>();
set = myScores.getStringSet("key", null);

这个问题已经在这里回答了Save ArrayList to SharedPreferences

public void addTask(Task t) {
        if (null == currentTasks) {
            currentTasks = new ArrayList<task>();
        }
        currentTasks.add(t);

        //save the task list to preference
        SharedPreferences prefs = getSharedPreferences(SHARED_PREFS_FILE, Context.MODE_PRIVATE);
        Editor editor = prefs.edit();
        try {
            editor.putString(TASKS, ObjectSerializer.serialize(currentTasks));
        } catch (IOException e) {
            e.printStackTrace();
        }
        editor.commit();
    }

public void onCreate() {
        super.onCreate();
        if (null == currentTasks) {
            currentTasks = new ArrayList<task>();
        }

        //      load tasks from preference
        SharedPreferences prefs = getSharedPreferences(SHARED_PREFS_FILE, Context.MODE_PRIVATE);

        try {
            currentTasks = (ArrayList<task>) ObjectSerializer.deserialize(prefs.getString(TASKS, ObjectSerializer.serialize(new ArrayList<task>())));
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

在这里您将任务类更改为 itemclass。

【讨论】:

  • 感谢您的回复。当我添加此代码时 set.addAll(mArrayList1);在这里我得到 Set 类型中的方法 addAll(Collection extends String>) 不适用于参数 (ArrayList) 这个错误。我的 arrylist 扩展了 Items 类..如何添加我的类类型将数组列表转换为字符串类型数组列表。
  • 用户集 set = new HastSet()
  • 此 putStringset 不支持以下 API 级别 11。如何将我的数组列表数据保存到 API 11 以下的 sharedpreference 中。
  • 您的项目类是否实现了可序列化?即公共类项目实现 Serializable{}
  • 请检查更新的答案
猜你喜欢
  • 2019-06-08
  • 2016-03-14
  • 2017-04-25
  • 1970-01-01
  • 2018-08-24
  • 2011-10-26
  • 1970-01-01
相关资源
最近更新 更多