【问题标题】:best method of writing/reading simple values in a file in android?在android中的文件中写入/读取简单值的最佳方法?
【发布时间】:2012-04-18 18:19:56
【问题描述】:

好的,这是我的问题: 我正在制作一个接收短信的应用程序,并且可以对它们进行排序等等。一切正常,但我现在必须上课,这会导致手机在收到短信时振动、播放声音并点亮屏幕。您登录系统,因此不同的用户将有不同的方式希望应用程序在收到短信时进行通知。 我正在创建一个类,该类在构造时会从文件中读取 3 个通知方法的用户设置作为整数,可以为这些整数保存新值,然后可以进行实际通知。我这样做是为了在构造对象时将用户名作为参数,然后从特定于他的文件中读取和写入设置。 我的问题是:从文件中保存和检索这些整数的最佳方法是什么? 我知道 SharedPreferences,它很容易使用,但我能相信它吗?如果我关闭应用程序,关闭手机,然后重新启动一切,信息还在吗? 我目前正在考虑制作一个具有 3 个公共 int 字段的小类,它实现 java.io.Serializable,然后将整个对象保存到一个文件中,这样在我需要它们时很容易获得特定的 int(键/值,就像 SharedPreferences 一样),但我读到这是一个相当缓慢的过程,并且由于该应用程序会收到很多消息(可能每分钟不止一次),因此每次接收时都必须从文件中读取可能会使应用程序有点重,因为电池寿命也很重要。 所以这就是我的问题,我应该制作自己的读/写文件系统,还是我可以相信 SharedPreferences 永远不会丢失任何数据?

我选择了sharedpreferences,效果很好,谢谢! =)

为了详细说明存储的整个性能,需要存储多少数据才能使 sqlite 数据库值得?因为所有这些短信都必须以某种方式存储,而且一次可能有数百条,这对于使用 sqlite 数据库是否足够?因为我在某处读到使用数据库比 io 方式慢一点,直到达到一定数量的数据?我希望数据库是值得的,因为它可能会让事情变得更容易。

【问题讨论】:

    标签: android performance file-io


    【解决方案1】:

    SharedPreferences 可以安全地保存数据。是推荐的数据存储方式之一,见http://developer.android.com/guide/topics/data/data-storage.html

    另一种方法,也是非常安全的,是使用包含用户名和整数的 Sql 表。只是几个值,这应该很容易实现。更多信息请参见同一链接。

    我看不出有任何理由避免使用这两种方法中的任何一种并使用文件系统。它们之前已经被使用过很多次,而且它们只是工作。

    【讨论】:

    • 好的,所以我假设在“SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);” PREFS_NAME 是存储它的文件。所以我可以有一个 PREF_NAME,它只是我放置用户名、他的登录名等的通用应用程序,然后我可以为每个用户设置单独的 PREFS_NAME,其中隐藏了他的个人设置。非常漂亮,我只需要确保我不会以这种方式丢失任何数据,谢谢 =)
    • 你可能会进入一个过于复杂的设计。因为您有一个共同的偏好来保留所有用户的登录信息,所以生成正确的密钥可能是一个问题。在阅读它们时,使用可能最终会得到带有公共前缀和数字的键,直到您不再找到它们为止。从最初的问题中,我也没有得到存储用户名/登录名的部分。考虑到所有这些,我认为使用 2 个 SQL 表是一个更好的选择。一个用于用户名 + 登录,另一个用于首选项。
    • 我创建的类可以很容易地跟踪它,因为在一般的 pref 文件中总是只有一个用户,你登录的那个,当类被构建时,它需要用户,并从具有该名称的文件中生成/读取 + 更多内容以确保它们不同。这也确保了即使有人使用通用 pref 文件的确切名称登录,它仍然不会是同一个,并且他们不能冲突 =) 但除此之外,是的,我更喜欢使用数据库来存储大多数数据, 但这很简单,而且有效 =)
    【解决方案2】:

    SharedPreferences 应该非常适合您正在做的事情。我实现了将我需要的所有内容存储在首选项中,除了密码。永远不会丢失。

    此外,SharedPreferences 也会写入文件 SharedPreferences file

    除非您希望在用户删除应用后保留这些设置,否则它适合您的目的。

    如果你坚持写一个文件,最好的方法可能是写成xml或json。后者可能会快一点。然后在适当的时候加载这个文件。

    不过,您确实应该考虑很难选择通过 SharedPreferences 写入文件。是值得信赖的!如果您不信任它,请相信我以及其他编写 Android 及其应用程序的人。

    【讨论】:

    • 我刚刚完成了我想要的一切,我现在有一个 sharedpreferences 文件来存储哪个用户登录,然后我有一个类,它为每个用户提供了他自己的 sharedpreferences 文件,他可以在其中存储 3整数,它实际上很酷=)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-15
    • 2021-09-08
    相关资源
    最近更新 更多