存储,更改和保存大量类对象的最佳方法

时间:2018-02-17 01:40:24

标签: java android object

我在android中创建我的第一个应用程序,并且正在尝试处理如何在交互式小说游戏中保存用户对某些对象变量所做的更改。

在游戏中,有三个主要类:房间,项目和玩家。每个类包含许多属性(即布尔值,字符串和列表),并且这些属性可以在游戏过程中随着玩家与它们交互而改变,例如,如果门打开/关闭,或者如果使用未点亮的灯笼一场比赛,它成为一个点亮的灯笼,具有改变的属性。截至目前,我已将所有对象放在主活动类中,并通过在各种方法中编写类似“shedDoor.isopen = false”的内容来更改属性。到目前为止一切正常。

我忽略了处理任何类型的保存功能,因为我是初学者,并认为它实现起来很简单,但是现在我已经接近完成游戏,我意识到处理比我想象的要困难得多。

所以,我的问题是,“存储我的游戏数据的最佳方式是什么,以便即使在应用程序被杀后,更改仍然存在?”我打算为用户提供一个加载和保存按钮,让他们回到游戏中的位置,如果他们想从头开始重新开始游戏按钮。我查看了sharedPreferences,但我不确定它是否适用于多个不同类型的数据类。

我的直觉让我相信制作一个SQLite数据库是一种可行的方式,但我必须彻底改进我的编码以实现它,并希望在开始这么大的事业之前得到一些更专业的建议。

一如既往,感谢帮助初学者。

3 个答案:

答案 0 :(得分:0)

我不太了解android,但我应该几乎类似于桌面java,所以这里有一些方法来保存你的数据(在java中):

通过将数据以字符串形式写入某个文件来保存它们:

BufferedWriter writer = new BufferedWriter(new FileWrite(new File(path));

writer.write("string you want to write");

使用将数​​据封存到某个文件来保存对象(更高效):

ObjectOutputStream os = new ObjectOutputStream(new FileOutputStream("save.dat"));
os.writeObject(objectyouwanttostore)

编辑1:

顺便说一句,如果你只是想开发一款适用于Android的应用程序,我建议使用像libgdx这样的引擎,因为它简化了很多,只需看一下他们的主页

答案 1 :(得分:0)

对于复杂数据,您应该使用具有自己格式的平面文件或SQLite数据库。无论哪种方式,您都应该明智地将任何给定时间所需的数据加载到内存中,而不是一次性加载所有内容。尽管移动设备每年都变得越来越强大,但它们在可用资源方面仍然非常有限。

答案 2 :(得分:-1)

您可以使用SharedPreferences存储游戏状态数据。要处理不同的数据类型,可以使用gson序列化游戏数据对象,然后将其作为字符串保存到SharedPreferences。您只需要使您的游戏状态数据对象实现可序列化。

google-gson了解有关gson的更多信息。

这里使用gson的步骤(取自https://stackoverflow.com/a/38089938/4758255) 您可以在Gradle文件中添加GSON依赖项:

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

这里是片段:

首先,创建常用的sharedPreferences:

//Creating a shared preference
SharedPreferences  mPrefs = getPreferences(MODE_PRIVATE);

从可序列化对象保存到首选项:

 Editor prefsEditor = mPrefs.edit();
 Gson gson = new Gson();
 String json = gson.toJson(YourSerializableObject);
 prefsEditor.putString("SerializableObject", json);
 prefsEditor.commit();

从首选项获取可序列化对象:

Gson gson = new Gson();
String json = mPrefs.getString("SerializableObject", "");
yourSerializableObject = gson.fromJson(json, YourSerializableObject.class);