在我的应用程序中,我有一个非常大的json文件(7947行),其结构非常简单,该文件将每个意大利城市及其Codice Catastale配对。
CodiciCatastali.json
...
"Villamar": "L966",
"Villamassargia": "L968",
"Villanova Tulo": "L992",
"Villanovaforru": "L986",
"Villanovafranca": "L987",
"Villaperuccio": "M278",
"Villaputzu": "L998",
...
我已经在JS中使用过它,并且加载起来很容易。
现在,我想在我的android应用程序中使用它,但我不知道有几件事。
首先,我应该将文件保存在什么地方?我对Raw文件夹或Assets文件夹有什么看法,但是哪种解决方案是最好的?
然后,如何将其加载到类似HashMap的对象中?我需要在给出城市名称后查找代码。 (“键”->“值”)
感谢您的帮助。
编辑
感谢Hamid Fadishei,我更新了代码:
HashMap map = new HashMap<String, String>();
try {
InputStream is = getResources().openRawResource(R.raw.CodiciCatastali);
JsonReader reader = new JsonReader(new InputStreamReader(is));
map = new Gson().fromJson(reader, HashMap.class);
} catch (Exception e) {
e.printStackTrace();
}
但是现在我无法调用getResources(),因为它要求我提供上下文。无论如何,我都想将上下文从主应用程序传递到模块,但这将为我提供应用程序的上下文,而不是存储我的file.json的库之一。
第二编辑
我尝试将文件存储在库的原始文件夹中,然后使用Context从主应用程序访问它,但意外地它起作用了! 现在我可以说问题解决了,谢谢。
答案 0 :(得分:2)
关于资产和原始资源之间的区别,请参阅The reason for Assets and Raw Resources in Android。
要加载JSON文件,可以使用Gson等第三方库。只需将依赖项添加到build.gradle:
compile 'com.google.code.gson:gson:2.8.5'
然后您就可以这样:
InputStream is = getAssets().open("CodiciCatastali.json");
JsonReader reader = new JsonReader(new InputStreamReader(is));
HashMap<String, Integer> map = gson.fromJson(reader, HashMap.class);
由于您已经提到文件的大小,因此建议在UI线程之外执行上述操作。