【问题标题】:Android: what is the best way to store JSON data offline for the app in android?Android:在 android 中为应用程序离线存储 JSON 数据的最佳方式是什么?
【发布时间】:2015-06-18 19:48:45
【问题描述】:

我想实现一个应用程序,它会显示路线号,骑手已经登上了谷歌地图。因此,要查找路线编号,我需要一些有关路线的信息,这些信息在 JSON 文件中定义。 JSON 文件中的信息将从应用程序离线处理和解析。它也应该与应用程序一起安装和卸载。 JSON 文件包含 100 多个 route_direction。它看起来像下面的代码。我可以将 JSON 文件存储在我的 Android 项目中的哪个文件夹中?像这样存储数据的最佳方式是什么?

JSON 文件:

{"route_direction":[
   {
     1_ab:{
                     
                    { 
                      stopsName_arrivalTime:{"abc":{"mon-fri":[05:33,06:00,06:30,...],
                                                        "sat":[],
                                                        "son":[]
                                                               }
                                             }, 

                                             
                         stops_loca:{lat:53.337994, long:10.600423} ,

                    },
                    { 
                      stopsName_arrivalTime:{"def":{"mon-fri":[],
                                                        "sat":[],
                                                        "son":[]
                                                         }
                                             }, 

                                             
                         stops_loca:{lat:53.740624, long:10.101322} 

                    },
                    { 
                      stopsName_arrivalTime:{"hgk":{"mon-fri":[],
                                                        "sat":[],
                                                        "son":[]
                                                               }
                                             }, 

                                             
                         stops_loca:{lat:53.644834, long:10.203372} 

                    }



                }

       },

        {1_ba:{
                     
                    { 
                      stopsName_arrivalTime:{"hgk":{"mon-fri":[05:33,06:00,06:30],
                                                        "sat":[],
                                                        "son":[]
                                                               }
                                             }, 

                                             
                         stops_loca:{lat:53.437994, long:10.400423} ,

                    },
                    { 
                      stopsName_arrivalTime:{"def":{"mon-fri":[],
                                                        "sat":[],
                                                        "son":[]
                                                         }
                                             }, 

                                             
                         stops_loca:{lat:53.540624, long:10.601322} 

                    },
                    { 
                      stopsName_arrivalTime:{"abc":{"mon-fri":[],
                                                        "sat":[],
                                                        "son":[]
                                                               }
                                             }, 

                                             
                         stops_loca:{lat:53.244834, long:10.703372} 

                    }


                }

        },........

   ]

}

【问题讨论】:

  • 您应该将其转换为对象并存储在 sqlite 数据库中。如果您仍想将其存储为文件,请使用 assets 文件夹。
  • @Jorge Campos:如何将 JSON 文件转换为对象?
  • 看看这个帖子:stackoverflow.com/questions/6079505/… 请注意,提到 GSon 的答案是使用谷歌的外部库。
  • @Jorge 将数据存储在 sqlite 中的优势是什么?所以我的意思是在将其转换为对象后,我认为我可以从那里访问数据而无需再次存储?
  • 优点是可以存储更简洁的数据。这样,如果您需要从该数据中获取特定信息,您可以使用 sql 代码来执行此操作。从中,您可以使您的应用程序对报告数据等更具响应性。但是,当然,如果您的要求只是存储它并检索它,那么只有考虑应用程序的可伸缩性,资产上的一个简单文件就可以完成这项工作很好。

标签: android json


【解决方案1】:

也许您可以使用SharedPreferences 保存它们。您可以通过以下方式存储 json 对象/数组:

将 json 保存到 SharedPreferences:

    PreferenceManager.getDefaultSharedPreferences(context).edit()
.putString("theJson",jsonObject.toString()).apply();

获取存储的json:

JsonObject jsonObject = PreferenceManager.
getDefaultSharedPreferences(this).getString("theJson","");

【讨论】:

  • 如果你注意到我有复杂的 JSON 字符串。我也可以使用 sharedPreferneces 来做到这一点吗?
  • @MrAsker 当然,您可以毫无问题地保存复杂的或大型的。如果您选择使用 sharedPreferences (并且如果您将 json 保存为字符串),请注意字符串格式。希望对您有所帮助!
  • 如果您需要存储少量数据,请使用共享首选项。参考:Android-Storage
  • 在这种情况下使用 Hawk github.com/orhanobut/hawk 比使用 sharepreferences 更好
【解决方案2】:

基本上,有两个地方可以存储原始资料:assets/res/raw/(原始资源)。这些已经讨论了很多,例如,请参阅链接:

The reason for Assets and Raw Resources in Android

http://thedevelopersinfo.com/2009/11/27/using-files-as-raw-resources-in-android/

http://www.41post.com/3985/programming/android-loading-files-from-the-assets-and-raw-folders

【讨论】:

    【解决方案3】:

    您将喜欢与应用打包的任意文件存储在 assets 文件夹中

    https://developer.android.com/tools/projects/index.html

    主要/资产/

    这是空的。您可以使用它来存储原始资产文件。 您在此处保存的文件将按原样编译为 .apk 文件,并且 原始文件名被保留。您可以在该目录中导航 与使用 URI 和读取文件的典型文件系统相同的方式 使用 AssetManager 的字节流。例如,这是一个很好的 纹理和游戏数据的位置。

    See this question on how to read from assets.

    【讨论】:

    • 知道这是一篇旧帖子,但要小心这个解决方案。不要在资产文件夹中存储任何敏感信息。精明的用户可以读取(和更改)它的文件夹。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多