Android SharedReferences中的字符串数组
我需要使用持久字符串数组(n行,1列)。Android SharedReferences中的字符串数组,android,arrays,Android,Arrays,我需要使用持久字符串数组(n行,1列)。 *首次运行应用程序时,需要将字符串数组创建为空。 *在后续的应用程序执行中,数组将从文件中填充,并且内容需要在整个应用程序的其余部分都可用。 *在执行应用程序时,阵列需要能够在行数上“增长” *在执行应用程序时,阵列行的长度需要能够增长 *用户可以选择清除以前的条目数组。 *最后,字符串数组内容将写回文件 我发现很多关于放置和获取现有SharedReferences字符串[]的参考文献,但是,在我的Android开发的新阶段,我正在为如何继续而挣扎 编辑
*首次运行应用程序时,需要将字符串数组创建为空。
*在后续的应用程序执行中,数组将从文件中填充,并且内容需要在整个应用程序的其余部分都可用。 *在执行应用程序时,阵列需要能够在行数上“增长”
*在执行应用程序时,阵列行的长度需要能够增长
*用户可以选择清除以前的条目数组。
*最后,字符串数组内容将写回文件 我发现很多关于放置和获取现有SharedReferences字符串[]的参考文献,但是,在我的Android开发的新阶段,我正在为如何继续而挣扎 编辑以下内容…
数据本身建议使用数组 例如:
MAIN ST. F55 63 KY08:57 12142015--------KY11:24 12142015345TMH KY13:57 12142015
MAIN ST. F56 WYE123 IN08:57 12142015--------KY11:24 12142015--------KY13:57 12142015
1ST ST. F57 --------KY08:57 12142015--------KY11:24 12142015789FPF KY13:57 12142015
1ST ST. F58 456FPF KY08:57 12142015998FPF KY11:24 12142015--------KY13:57 12142015
1ST ST. F59 789TTM KY08:57 12142015--------KY11:24 121420151234DG KY13:57 12142015
我首先需要将此数据保存在一个文件中然后在一个GUI中检查文件是否存在。 如果有,没问题 如果不存在,我创建一个 然后,在随后的GUI中,我必须检查参数是否存在 如果它们不存在,请将它们添加到现有数据行中。 如果它们已经存在,请通知用户 等等 然后,当所有当前的“pass”数据都通过多个单独的GUI收集后,我必须将整个数据集写入文件中 我之所以认为我需要SharedReference方法,是因为当用户通过应用程序时,需要在GUI之间查找和检查数据。 如果这种“信念”是错误的,我愿意接受更好的方法建议 编辑下面的2个…
在对web引用的进一步研究中,我开始认为对于这些数据以及数据需要如何更改的最好方法可能是使用SQLite方法。有什么想法吗
如果您能提供任何帮助/建议,我们将不胜感激。我不鼓励您将SharedReference用于首选项以外的任何内容。意味着很少改变的东西-非常少而且非常轻。不要在那里放太多数据。越少越好。作为SharedReference基础的数据结构不是数据库 另一张纸条。它不是一个字符串列表,而是一个字符串集。集合不一定是有序的,也不一定保持其顺序。意思-它不是行。它是一个字符串集合,可以以任何有趣的顺序返回(通常有一些,但这取决于实现,我不知道) 现在,您可以创建自己的列表,自己的数据结构,将其保存到字符串中并读取,使用json来完成这项工作或类似的工作,或者更好地使用一个数据库,它可以完成这项工作 解释它,但正如你将看到的,这可能需要一些时间 现在不要误会我,但我必须警告你以下方法。它是有效的,但存在许多问题,而且远不是线程安全的。只要您只从ui线程打开它,并且不在内存中保留任何要缓存的内容,它就不会是一个问题-如果您这样做,将会产生很多问题。 使用文件可以解决添加行和清除的问题。只是一个简单的文件 看这里 更改是在写入时追加: openFileOutput(“filename”,Context.MODE\u APPEND) 看到上下文模式了吗?现在您基本上可以只写一行,每次追加一行 如果要清除文件,只需删除文件(“文件名”)
正如所说,这不是线程安全的,但如果小心使用,这是一个可行的选择。请按照此步骤使用SharedReference实现您想要的功能
您可以使用我的名为的开源库,它解决了这个问题,并在引擎盖下使用了
共享引用和Gson。它基本上是默认Android机制的包装器
您可以通过以下方式使用它:
Prefser prefser = new Prefser(context); // create Prefser object
prefser.put("key", Arrays.asList("one", "two", "three")); // save array of Strings
String[] value = prefser.get("key", String[].class, new String[]{}); // read array of Strings
有关更多信息,请查看项目存储库、测试和README.md
文件
链接:
请注意,SharedReferences
有一些限制,不应用于存储大量数据。如果您期望大量的数据,考虑使用SQLite数据库或另一种类型的数据库(例如,如果您力求简单,则使用NoSQL或类似的方法)。 < P> OK,基于数据,它需要如何操作,以及使用SyrdPoad方法的利弊,我决定采用SQLite方法。
通过这种方法,我应该能够轻松地检查:
*如果必要的表存在(如果不存在,则创建它)
*如果必要的字段1+字段2存在(如果不创建新记录)
*我可以根据需要修改记录的Field3内容
然后,当用户的操作完成后,我可以将SQLite表“记录”转换为字符串,并将其作为文件写入,然后删除或清除关联的SQLite表(直到下次需要)
我真诚地感谢你的所有建议。
谢谢。您可以使用SharedReferences保存数据。为了保存可用于循环的所有矩阵。您有问题吗?当用户在应用程序中移动时,每个GUI上的数据都会发生变化。但在多个连续GUI的末尾,数据不再改变。我猜想,对于每个GUI需求,使用文件IO方法将是一个相当慢的过程。我错了吗?实际上这比共享参考要快得多。SharedRef其实并没有太多其他功能。特别是对于您需要的用例