JSONObject解析引发java.lang.OutOfMemoryError问题
来源:互联网 发布:苹果2g网络怎么改4g 编辑:程序博客网 时间:2024/06/07 23:44
先看代码
需要解析的json
{"code":0,"data":[{"id":null,"name":"Doe"},{"id":2,"name":"Sam"}]}
下面代码用JSONObject解析
private void parseByJsonObject(String jsonStr) {try {JSONObject obj = new JSONObject(jsonStr);int code = obj.isNull("code") ? 0 : obj.getInt("code");JSONArray datas = obj.isNull("data") ? new JSONArray() : obj.getJSONArray("data");int length = datas.length();List<Person> persons = new ArrayList<Person>(length);for (int i = 0; i < length; i++) {JSONObject data = (JSONObject) datas.get(i);int id = data.isNull("id") ? 0 : data.getInt("id");String name = data.isNull("name") ? "" : data.getString("name");Person person = new Person();person.setId(id);person.setName(name);persons.add(person);}// 输出 code=0;persons=[{"id":0,"name":"Doe",}, {"id":2,"name":"Sam",}]Log.e("scrat", "code="+code + ";persons="+persons.toString());} catch (JSONException e) {e.printStackTrace();}}
这是一个比较常用的, 把Json字符串转为JsonObject的方法
但是, 如果这个jsonStr过大, 会引发OOM异常
改用JsonReader来读取可以避免此异常 (时间关系, 代码有点随意)
@SuppressLint("NewApi")private void parseByJsonReader(String jsonStr) throws IOException {JsonReader jsonReader = null;InputStream in = null;Reader reader = null;try {in = new ByteArrayInputStream(jsonStr.getBytes());reader = new InputStreamReader(in, "UTF-8");jsonReader = new JsonReader(reader);int code = 0;List<Person> persons = new ArrayList<Person>();jsonReader.beginObject();while (jsonReader.hasNext()) {String tmpName1 = jsonReader.nextName();if ("code".equals(tmpName1)) {code = jsonReader.nextInt();} else if ("data".equals(tmpName1)) {jsonReader.beginArray();while (jsonReader.hasNext()) {int id = 0;String name = null;jsonReader.beginObject();while (jsonReader.hasNext()) {String tmpName2 = jsonReader.nextName(); // 一定要放到 jsonReader.peek()的判断前面, 否则判断NULL无效if (jsonReader.peek() == JsonToken.NULL) {jsonReader.skipValue();continue;}if ("id".equals(tmpName2)) {id = jsonReader.nextInt();} else if ("name".equals(tmpName2)) {name = jsonReader.nextString();} else {jsonReader.skipValue();}}jsonReader.endObject();Person person = new Person();person.setId(id);person.setName(name);persons.add(person);}jsonReader.endArray();} else {jsonReader.skipValue();}}jsonReader.endObject();Log.e("scrat", "code="+code + ";persons="+persons.toString());} catch (UnsupportedEncodingException e) {e.printStackTrace();} finally {if (reader != null) {reader.close();}if (in != null) {in.close();}if (jsonReader != null) {jsonReader.close();}}}
0 0
- JSONObject解析引发java.lang.OutOfMemoryError问题
- java.lang.outofmemoryError问题
- java.lang.OutOfMemoryError问题
- java.lang.OutOfMemoryError: Java heap space问题
- java.lang.OutOfMemoryError: Java heap space问题
- java.lang.OutOfMemoryError:Java heap space问题
- java.lang.OutOfMemoryError: PermGen space问题
- 内存溢出问题(java.lang.OutOfMemoryError)
- java.lang.OutOfMemoryError: PermGen space问题
- java.lang.OutOfMemoryError: PermGen space 问题
- java.lang.OutOfMemoryError问题与heap获取
- 【Android】【内存】java.lang.OutOfMemoryError 问题分析
- 解决内存溢出问题:java.lang.OutOfMemoryError
- 线上java.lang.OutOfMemoryError问题定位三板斧
- 使用JSONObject出现的一系列java.lang.NoClassDefFoundError问题
- java.lang.OutOfMemoryError翻译
- 处理java.lang.OutOFMemoryError
- java.lang.OutOfMemoryError 解决方法
- Tomcat服务器的安装及配置(章节摘要)
- 大数问题 *
- Matlab size() & repmat() 函数的使用
- //2、写一个整型数组排序的函数
- java程序员修炼之道
- JSONObject解析引发java.lang.OutOfMemoryError问题
- CF 452B 4-point polyline(思维)
- 坑爹的黑店
- 【leetcode】Pascal's Triangle II (python)
- P2P原理及UDP穿透简单说明
- 一个低调的博客建立了。。。。
- CodeForces 283C Coin Troubles 分析+背包思想
- c_str的使用
- Cocos2d-x 3.0---触摸机制