【问题标题】:Saving and reading ArrayList保存和读取 ArrayList
【发布时间】:2017-06-18 14:30:03
【问题描述】:

保存方式(保存列表为Arraylist):

public static void saveList(){
    editor.putString("list", Calculate.saveList.toString());
}

我的阅读方式(大概是我的问题所在):

public static void readList(){
    String arrayString= prefs.getString("list", null);
    Calculate.saveList = (ArrayList<String>) Arrays.asList(arrayString.split(","));
}

Logcat 错误:

java.lang.RuntimeException:无法启动活动 ComponentInfo{com.tsury.icalorie/com.tsury.icalorie.SavedActivity}:java.lang.NullPointerException:尝试调用虚拟方法 'java.lang.String[] java .lang.String.split(java.lang.String)' 在空对象引用上

我需要保存那个 ArrayList,当然以后再阅读它。

【问题讨论】:

  • 保存时是否确保在 editor 对象上调用 .apply().commit()
  • 这样做了,现在我收到此错误 - java.lang.RuntimeException: Unable to start activity ComponentInfo{com.tsury.icalorie/com.tsury.icalorie.SavedActivity}: java.lang.ClassCastException: java.util.Arrays$ArrayList 不能转换为 java.util.ArrayList

标签: java android arraylist save


【解决方案1】:

您可以将数组列表转换为 json 字符串并将其保存为字符串 并读取该 json 字符串并将其转换为您的对象。

你可以使用 Gson 库来做到这一点。

执行以下步骤:

1- 在您的 Gradle 文件中添加此依赖项

compile 'com.google.code.gson:gson:2.7'

创建一个保留 ArrayList 的类

class MyList{
   @SerializedName("myStrings")
   public ArrayList<String> myStrings;
}

创建一个 MyList 类的实例并将您的值添加到 myStrings 中。

MyList myListInstance=new MyList(); 
myList.myStrings.add("Peter");
myList.myStrings.add("John");
myList.myStrings.add("Faraz");

然后使用此行将您的 MyList 对象转换为 Json:

String json=new Gson().toJson(myListInstance)

并将这个 json 字符串保存在 sharedPreferences 中

当您想加载数据时,从 sharedPreferences 中读取您的 json 字符串,然后使用此行将其转换为您的对象

MyList myList = new Gson().fromJson(json, MyList.class);

【讨论】:

  • 有没有这样做的例子?
  • 我应该怎么做:“创建一个 MyList 类的实例并在 myString 中添加你的值。”?
猜你喜欢
  • 2015-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-24
  • 2016-10-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多