我在assets文件夹中有两个json文件。问题是在内存较小的设备上出现内存不足错误。我该怎么做才能解决这个问题?我有以下代码:
存储json的变量
private static JSONObject one;
private static JSONObject two;
设置变量的方法
public static void setJSON(Context context){
try {
one = new JSONObject(loadJSON(context,"one.json"));
two = new JSONObject(loadJSON(context,"two.json"));
} catch (JSONException e) {
e.printStackTrace();
}
}
加载json的方法
private static String loadJSON(Context context, String filename){
try {
InputStream is = context.getAssets().open(filename);
int size = is.available();
byte[] buffer = new byte[size];
is.read(buffer);
is.close();
String json = new String(buffer, "UTF-8");
return json;
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
答案 0 :(得分:0)
有一些想法可能对此有所帮助(并且它有助于显示JSON文件片段)
A)你的JSON文件有多大? JSON处理内存很重,因为您需要为解析器和它在内存中创建的对象提供RAM。你能缩小JSON吗?
B)你能一次加载一个吗?过程,并免费?
C)如果所有其他方法都失败了,请尝试将它们分成几个对象,然后加载。
D)总而言之,JSON是一种可怕的序列化形式。如果您可以使用Java序列化,那么您将会看到更少的内存。
答案 1 :(得分:0)
不要使用JSON,而是将您的数据转换为普通的SQLite数据库,并将其预先填充到assets
文件夹中的APK文件中。然后在第一次运行时将它安装到app文件夹(你可以使用this tool)然后,最后使用普通数据库,只需获取当时所需的数据,而无需加载整个JSON