0

我创建了一个计算各种海军材料的程序。现在是保存用户输入、计算和结果的时候了。问题是,我的同事需要为不同的客户进行计算,为他们创建不同的项目编号。所以我想为这些不同的项目保存我的程序的所有值。我会将项目显示为开始屏幕,在DataGridView. 根据所选项目,程序必须加载这些值。

我已经查看了其他人以前的解决方案,为此使用了数据库,但我的问题是:是否有这样做,而不使用数据库。因为我是数据库新手,在 C# 方面也没有那么丰富。因此,如果有人有提示、参考或小例子,我将不胜感激。

关于应用程序的一些信息:

该应用程序具有不同的标签页。在每个选项卡页面中,用户必须提供一些输入,例如宽度、高度、深度等。在一个选项卡中,风力作用于其他选项卡上的输入。在另一个选项卡中,线的力应用于不同选项卡上的多个输入,等等。

这些值需要针对不同的客户进行计算,因此需要针对不同的项目进行计算。需要保存这些项目,以便对其进行审查、编辑等。因此,一个人打开程序并看到一个带有 DataGridView 的窗口,其中包含不同的项目(项目编号、客户端名称等)。他单击一个项目进行编辑,因此他应该看到属于该程序的值。如果他关闭此项目,则应保存值,并且用户应该可以在 DataGridView 中选择其他项目并加载其他项目的值。

我的问题是:我如何用它们的值保存这些“不同的项目”。

4

1 回答 1

0

OP 要求一个“保存”功能,这不仅仅是在程序执行期间保留数据(您必须这样做才能使应用程序有价值。)

我建议将数据保存在 sdcard 上的文件中,这样您不仅可以稍后调用它,还可以让用户将设备作为外部驱动器安装在自己的计算机上并获取数据以在其他地方使用。

所以你真的需要一个多点系统:

1) 实现 onSaveInstanceState()。在这个方法中,你被传递了一个Bundle,它基本上就像一个哈希对象。在捆绑包中存储尽可能多的信息,以便在应用程序停止的位置重新启动应用程序。在您的 onCreate() 方法中,检查传入的包是否为非空,如果是,则从包中恢复状态。

2) 实现 onPause()。在此方法中,创建一个 SharedPreferences 编辑器并使用它来保存您下次启动应用程序所需的任何状态。这主要包括用户的偏好(因此得名),但与应用程序的启动状态相关的任何其他内容也应该放在此处。我不会这里存储分数,只是你需要重新启动应用程序的东西。然后,在 onCreate() 中,只要没有捆绑对象,就使用 SharedPreferences 接口来调用这些设置。

3a) 至于分数之类的东西,你可以按照上面 Mathias 的建议,将分数存储在 getFilesDir() 中返回的目录中,使用 openFileOutput() 等。我认为这个目录是应用程序私有的,并且存在于主存储中,这意味着其他应用程序和用户将无法访问数据。如果你没问题,那么这可能是要走的路。

3b)如果您确实希望其他应用程序或用户可以直接访问数据,或者如果数据将非常大,那么 sdcard 就是要走的路。选择一个目录名称,如 com/user1446371/basketballapp/ 以避免与其他应用程序冲突(除非您确定您的应用程序名称是合理唯一的)并在 sdcard 上创建该目录。正如 Mathias 所指出的,您应该首先确认 sdcard 已安装。

File sdcard = Environment.getExternalStorageDirectory();
if( sdcard == null || !sdcard.isDirectory()) {
    fail("sdcard not available");
}
File datadir = new File(sdcard, "com/user1446371/basketballapp/");
if( !datadir.exists() && !datadir.mkdirs() ) {
    fail("unable to create data directory");
}
if( !datadir.isDirectory() ) {
    fail("exists, but is not a directory");
}
// Now use regular java I/O to read and write files to data directory

我建议为您的数据使用简单的 CSV 文件,以便其他应用程序可以轻松读取它们。

显然,您必须编写允许“保存”和“打开”对话框的活动。我通常只是调用 openintents 文件管理器并让它完成工作。但是,这需要您的用户安装 openintents 文件管理器才能使用这些功能。

于 2013-01-28T11:35:34.443 回答