保留Android活动数据

时间:2015-11-12 18:33:46

标签: android

我的Android应用程序有一组相当复杂的对象,我用它来存储用户数据,我想保存这个数组,并在运行应用程序时恢复以前会话中的数据。有问题的对象有几个数据(因此将对象放在第一位),所以我真的不想写出所有组件到SharedPreferences(这是我做这个的一个想法)。我也查看了onSaveInstanceState(),它似乎没有足够可靠地调用来帮助我。

有问题的对象是Serializable,但似乎没有我可以使用的putSerializable()方法,所以我看不出这对我这个问题有什么帮助。

任何人都可以提供将此数据转储到非易失性并稍后重新使用的建议吗?

3 个答案:

答案 0 :(得分:1)

除了相当简单的键值对之外,使用SharedPreferences并不理想。您最好的选择是使用SQLite数据库。查看developer docs了解详情。

答案 1 :(得分:1)

如果您只是使用Serializable进行滚动,则可以考虑使用普通Java-land中使用的相同方法来将可序列化的字符串写入存储在SharedPreference中的String;有关一种方法,请参阅this question

否则,我认为你最好使用类似GSON的东西,就像Zanna所说的那样。

答案 2 :(得分:0)

您可以使用您的应用程序的内部存储来保存这些数据,并在每次需要时通过FileInputStream恢复它们。

如果您的对象很复杂,为了节省空间,您可以使用Gson对其进行序列化,然后将其保存为一个简单的字符串,始终保存在内部存储中。

示例:

Object yourObject = new Object;
Gson gson = new Gson();
String serializedObject = gson.toJson(yourObject);

//write to internal storage
FileOutputStream fos = openFileOutput(filename, Context.MODE_PRIVATE);
fos.write(string.getBytes());
fos.close();

你可以用这种方式读取那个字符串:

String filename = "your_file";
FileInputStream fis = openFileInput(filename);
StringBuffer sBuffer = new StringBuffer();
DataInputStream dataIO = new DataInputStream(fis);
String strLine = null;
while((strLine = dataIO.readLine()) != null)
{
sBuffer.append(strLine+”\n”);
}
dataIO.close();
fis.close();

最后反序列化。