Android gson streaming from assets
android, gson
Solution
You'll get the best performance by mixing stream parsing with Gson's data binding. Here's an example that might work for your data set:
public List<Drug> readJsonStream(InputStream in) throws IOException {
JsonReader reader = new JsonReader(new InputStreamReader(in, "UTF-8"));
List<Drug> drugs = new ArrayList<Drug>();
reader.beginArray();
while (reader.hasNext()) {
reader.beginObject();
while (reader.hasNext()) {
String name = reader.nextName();
if (name.equals("drug")) {
Drug drug = gson.fromJson(reader, Drug.class);
drugs.add(drug);
} else {
reader.skipValue();
}
}
reader.endObject();
}
reader.endArray();
reader.close();
return drugs;
}
Note that calls to `beginArray`/`endArray` and `beginObject`/`endObject` must be balanced. More details are available on Gson's streaming guide.
Problem
I have 9 MB txt file with json objects inside it.I need to parse the using gson streaming, i have done ``` AssetManager assetManager = activity.getAssets(); InputStream inputStream; inputStream = assetManager.open(fileName); JsonReader reader = new JsonReader(new InputStreamReader(inputStream, "UTF-8")); JsonElement json = new JsonParser().parse(reader); JsonArray array = json.getAsJsonArray(); Gson gson = new Gson(); String interationString; for (JsonElement jsonElement : array) { interationString = jsonElement.getAsJsonObject().get("drug") .toString(); Log.d("drug", interationString); Drug drug = gson.fromJson(interationString, Drug.class); Log.d("drug", "" + drug); DatabaseManager.getInstance().saveDrug(drug); } ``` I have put the json file in assest. But work on device with 4.0 but in emulator 2.3 it was not working and show the logs ``` 05-29 11:19:41.290: D/dalvikvm(164): GC_EXPLICIT freed 74K, 46% free 3344K/6151K, external 1323K/1554K, paused 84ms 05-29 11:19:46.330: D/dalvikvm(373): GC_EXPLICIT freed 2K, 51% free 2718K/5511K, external 716K/1038K, paused 87ms 05-29 11:19:51.370: D/dalvikvm(203): GC_EXPLICIT freed 15K, 51% free 3083K/6215K, external 716K/1038K, paused 102ms 05-29 11:19:56.391: D/dalvikvm(573): GC_EXPLICIT freed 53K, 51% free 2771K/5639K, external 964K/1467K, paused 79ms ``` Then stop,i have try parse the small file and it was working fine. Can anyone help to parse long file in Android so that it can work in all android device. Thank you.