保存不同项目的应用程序值

时间:2012-11-19 13:15:51

标签: c#

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

我已经看过其他人使用数据库的先前解决方案,但我的问题是:无论如何都要这样做,而不使用数据库。因为我是数据库的新手,也没有C#的经验。因此,如果有人有提示,参考或小例子,我很感激。

有关申请的一些信息:

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

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

我的问题是:如何将这些“不同项目”与其价值保存在一起。

1 个答案:

答案 0 :(得分:0)

OP正在要求一个“保存”功能,这不仅仅是在程序执行过程中保存数据(你必须为应用程序做任何有价值的事情。)

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

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

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

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

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

3b)如果您确实希望其他应用程序或用户可以直接访问数据,或者数据将非常大,那么SD卡就是您的选择。选择一个像com / user1446371 / basketballapp /这样的目录名,以避免与其他应用程序发生冲突(除非您确定您的应用程序名称相当独特)并在SD卡上创建该目录。正如Mathias指出的那样,您应该首先确认已安装SD卡。

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文件管理器以使用这些功能。