我想问一下,如何存储json数据。我有一个JSON
文件,我使用JSON库解析它。现在我从文件中获取数据。但我想存储它们并在以后再显示它们。
问题是,什么是存储数据的最佳方式?是否值得存储它们?
我正在考虑sql数据库,因为它简单而且最常用。 官方的Android文档几乎没有例子,到目前为止我搜索过但如果你有更好的指导,请告诉我。谢谢! :)
EDIT1:
好的,我有json文件的数据,我可以使用RAW资源添加到我的应用程序。那些数据不会改变,它的食谱列表,我不必下载它。我可以读取这样的数据:
InputStream is = mContext.getResources().openRawResource(R.raw.package_01);
Writer writer = new StringWriter();
char[] buffer = new char[1024];
try {
Reader reader = new BufferedReader(new InputStreamReader(is, "UTF-8"));
int n;
while ((n = reader.read(buffer)) != -1) {
writer.write(buffer, 0, n);
}
is.close();
//catchblock
.....
}
然后我可以像这样解析JSONLibrary的数据:
try {
//representing []JSON
JSONArray jsonArray = new JSONArray(writer.toString());
if(jsonArray != null){...}
...}
我向ListView发送HashMap
,其中包括名称和ID。如果用户单击ListView / GridView项,则会启动新的Activity,其中显示所有已解析的数据。我需要将这些解析后的数据与id匹配。
文件中有大约200个食谱。在活动开始时解析数据,同时显示Splashscreen。 我不确定,每次app启动时是否善意解析数据。
那么,每次应用程序启动时解析数据是否有效?如果是,如何将解析后的数据“保持在一起”?我应该使用HashMap
吗?
我希望我澄清了我的问题:)感谢您的帮助。
EDIT2:
所以在我知道该怎么做之后,我尝试了建议的解决方案来使用HashMap
。我遇到问题Failed Binder Exception。我有用Base64编码的图像,这意味着我有一个很长的字符串,例如here。这是很多数据,有限制:
The Binder transaction buffer has a limited fixed size, currently 1Mb, which is shared by all transactions in progress for the process.
我试图把它保存到
Set<String> titles = new HashSet<String>();
然后到SharedPreferences
,但每个食谱的数据都是混合的。
**所以,这里又来了,我应该将数据保存到SQLite数据库还是我可以使用另一个有效的选项? **
谢谢!
答案 0 :(得分:1)
这实际上取决于许多因素:您现在拥有多少数据,以后您将拥有多少数据,数据有多复杂。你可以使用像数组或hashmap这样简单的东西;或者像数据库那样复杂的东西。您需要考虑您要做的事情,并找到最简单的解决方案。如果您尝试保留数据,则可以使用共享首选项,数据库和内部/外部存储(概述here选项)。
如果没有更多信息,很难说究竟要做什么。保持简单。如果您从Web服务获取JSON,我将使用ArrayList或HashMap来存储数据,而不是持久化它。它更容易实现并完成工作。
编辑:
回答你的问题:是的,使用HashMap并且每次解析都没问题。您只有200个字段,并且没有图像,因此解析所需的时间很短。无论您如何存储数据,都会进行某种程度的“解析”。例如,如果将数据存储在数据库中,则必须仍然提取数据,并将其放入HashMap中。