存储已解析的json数据的最佳方法是什么

时间:2014-05-26 15:38:04

标签: android sql json base64

我想问一下,如何存储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数据库还是我可以使用另一个有效的选项? ** 谢谢!

1 个答案:

答案 0 :(得分:1)

这实际上取决于许多因素:您现在拥有多少数据,以后您将拥有多少数据,数据有多复杂。你可以使用像数组或hashmap这样简单的东西;或者像数据库那样复杂的东西。您需要考虑您要做的事情,并找到最简单的解决方案。如果您尝试保留数据,则可以使用共享首选项,数据库和内部/外部存储(概述here选项)。

如果没有更多信息,很难说究竟要做什么。保持简单。如果您从Web服务获取JSON,我将使用ArrayList或HashMap来存储数据,而不是持久化它。它更容易实现并完成工作。

编辑:

回答你的问题:是的,使用HashMap并且每次解析都没问题。您只有200个字段,并且没有图像,因此解析所需的时间很短。无论您如何存储数据,都会进行某种程度的“解析”。例如,如果将数据存储在数据库中,则必须仍然提取数据,并将其放入HashMap中。