当前位置: 首页 > 知识库问答 >
问题:

共享首选项 : 保存到列表视图

陶睿
2023-03-14

我在共享首选项中保存列表并将其显示在列表视图中没有问题,但我的问题是当我重新启动应用程序并尝试将项目添加到列表视图时 旧的存储项目已删除.有我的代码:

public void SaveDatesToList(){
    list.add(i+"");
    array = new String[list.size()];
    list.toArray(array);
    tinyDB.putListString("DATES",list);

}

public void getDates(){

    for (String str:tinyDB.getListString("DATES")) {
        list.add(str);
    }

共有2个答案

华福
2023-03-14

问题是您一直在覆盖旧数据,因为您可能不会检索旧数据并向其追加新数据。< br >从< code>SharedPreference中检索旧数据,并将它们与新的ArrayList合并。然后存储合并后的数组列表。

组合< code>ArrayList的示例

ArrayList<String> first = new ArrayList<String>();
ArrayList<String> second = new ArrayList<String>();      
//Let both arraylists have some data
first.add("data1");   
second.add("data2");   

// now first contains "data1" and "data2"
first.addAll(second);

现在,ArrayList首先拥有所有数据。例如

editor.putStringSet("KEY", first).apply();
黄兴业
2023-03-14

请在sharedprefrence中尝试这两个函数存储数组列表和检索数组列表

 private void storeArray() {
    ArrayList<String> arr1 = new ArrayList<>();
    SharedPreferences prefs = this.getSharedPreferences("Demo", Context.MODE_PRIVATE);
    SharedPreferences.Editor edit = prefs.edit();

    arr1.add("A");
    arr1.add("B");
    arr1.add("C");
    arr1.add("D");
    arr1.add("E");

    Set<String> set = new HashSet<String>();
    set.addAll(arr1);
    edit.putStringSet("yourKey", set);
    edit.commit();
}

private void retriveArray() {
    SharedPreferences prefs = this.getSharedPreferences("Demo", Context.MODE_PRIVATE);
    SharedPreferences.Editor edit = prefs.edit();
    Set<String> set = prefs.getStringSet("yourKey", null);
    ArrayList<String> sample = new ArrayList<String>(prefs.getStringSet("yourKey", null));
    Log.d("Check Size", "Check Size" + sample.size());

    if (sample.size() > 0) {
        for (int i = (sample.size() - 1); i >= 0; i--) {
            Log.d("Array Value", "Array Value" + sample.get(i));
        }
    }
}
 类似资料:
  • 我正在创建一个番茄工作计时器应用程序。它有2项活动: 主要活动是设置时间 我已经创建了一个对象,它保存了设置的时间,我希望这些时间显示在Recents活动中的按钮中。但是,似乎没有保存数据,而是显示了包名称。

  • 你好,我正在尝试保存一个共享首选项的主题。当用户点击某个主题的按钮时,我希望该主题被设置为默认并保存,所以当他们重新打开应用程序时,它仍然是那个新主题。

  • 你好。我需要帮助。我想用SharedPreferences在Listview中保存动态添加的项目。我正在添加带有公共void favekle函数的listview项目。我正在向数组列表添加条目

  • 我正在尝试将Firebase DataSnapshot对象保存到SharedReferences。 请看这篇文章,我在其中设计了一种方法来实现这一点。 ... 到目前为止,我已经尝试了: > 使用Gson。Json方法。结果:似乎不起作用。。。我不认为DataSnapshot类是“POJO”类型的类。。。至少没有一个能与gson合作。 使用此方法: 私有静态字符串toString(可序列化o)引发

  • 我正在向SharedPreference添加一个集合。这是来自另一个类的静态集,该类处理一些数据并将其存储在该集中。 然后我转到另一个活动(订单活动),在那里我显示了这组信息。第一次访问共享偏好时,我能够获得正确的详细信息。例如name1、name2、name3。 然后,我离开此活动,返回到另一个活动,添加另一个名称,然后再次返回到此 Order 活动。我希望这次得到名称1,名称2,名称3,名称4

  • 对于下面的代码,我正在尝试检索共享的首选项,我认为它保存正确,但当我回到登录屏幕时,所有的数据都消失了。我需要它留在我回到这个屏幕上。所以我在个人资料页面上输入姓名、年龄和id到三个单独的行中。然后按下save按钮,然后按下action Bar上的back转到前面的页面。当我回到个人资料页面时,我的信息应该还在那里,但它没有任何帮助?