2016-12-13 5 views
0

プロジェクトでJSONObjectをJsonObject(Gson固有の形式)に変換する必要があります。この目的のために、私は同じ方法を変換するために次の方法を使用していますJSONObjectをJsonObjectに変換してメモリ例外をスローする

public static JsonObject getJsonFromJSONObject(JSONObject json) { 

     JsonObject jsonObject = null; 
     try { 
      JsonParser jsonParser = new JsonParser(); 
      jsonObject = (JsonObject) jsonParser.parse(json.toString()); 

     }catch (Exception e){ 

      CLog.e(Constants.LOG_TAG, e.getMessage()); 
     } 
     return jsonObject; 
    } 

私のアプリのテスト段階ではうまく動作します。しかし、いくつかのまれな現象でメモリ例外から抜け出す。私は完全にこのシナリオに1週間以来立ちましたが、それでも解決策を見つけることができませんでした。私は取得しています

エラー:

Fatal Exception: java.lang.OutOfMemoryError 
     at java.lang.AbstractStringBuilder.enlargeBuffer(AbstractStringBuilder.java:95) 
     at java.lang.AbstractStringBuilder.append0(AbstractStringBuilder.java:133) 
     at java.lang.StringBuilder.append(StringBuilder.java:124) 
     at org.json.JSONStringer.string(JSONStringer.java:344) 
     at org.json.JSONStringer.value(JSONStringer.java:252) 
     at org.json.JSONArray.writeTo(JSONArray.java:602) 
     at org.json.JSONStringer.value(JSONStringer.java:233) 
     at org.json.JSONObject.writeTo(JSONObject.java:672) 
     at org.json.JSONObject.toString(JSONObject.java:641) 
     at com.android.package.http.utils.JSONUtils.getJsonFromJSONObject(Unknown Source) 
     at android.app.ActivityThread.handleReceiver(ActivityThread.java:2573) 
     at android.app.ActivityThread.access$1700(ActivityThread.java:151) 
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1397) 
     at android.os.Handler.dispatchMessage(Handler.java:110) 
     at android.os.Looper.loop(Looper.java:193) 
     at android.app.ActivityThread.main(ActivityThread.java:5299) 
     at java.lang.reflect.Method.invokeNative(Method.java) 
     at java.lang.reflect.Method.invoke(Method.java:515) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:825) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:641) 
     at dalvik.system.NativeStart.main(NativeStart.java) 

上記のエラーを、0.6万人のユーザーのうち26,000ユーザーと反映されています。私はこれを解決するために遅れているところで私は無知です。どんな解決策や提案も私には役に立ちます。前もって感謝します。

+0

_6lakh_のユーザーは何人ですか? – sschrass

+0

私の編集を確認してください。 – Chandru

答えて

1

はJSONObjectをファイルに書き込みをしてみて、オブジェクトに

try { 
      FileInputStream isf = new FileInputStream(new File(fc.getLocalCache() + "/" + folderId + ".srl")); 
      ObjectInputStream in = new ObjectInputStream(isf); 
      String json = (String) in.readObject(); 
      JsonParser parser = new JsonParser(); 
      JsonObject o = parser.parse(json).getAsJsonObject(); 
      //Gson gSon= new GsonBuilder().setDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'").create(); 
      jsonObject = new Item(); 
      jsonObject.setRawObject(new DefaultSerializer(new DefaultLogger()), o); //new Gson().fromJson(o, Item.class); 
      in.reset(); 
      in.close(); 
      isf.close(); 
      // Log.i("jsonObject", jsonObject.toString()); 
     } catch (Exception e) { 
      e.printStackTrace(); 
      //Log.i("getObjectsFromLocal Exception", e.toString()); 
      return jsonObject; 
     } 

NOTE を読み取るためのライティングJSONObject

ObjectOutputStream out = null; 
     FileOutputStream fos = null; 

     try { 
      File file = new File(fc.getLocalCache().getAbsolutePath() + "/" + folderId + ".srl"); 
      fos = new FileOutputStream(file); 

      out = new ObjectOutputStream(fos); 
      out.writeObject(response.toString()); 
     } catch (OutOfMemoryError | Exception e) { 
      e.printStackTrace(); 
     } 

のファイル

からjsonObjectとして読みますメモリ不足の例外を生成するには、2〜3MB以上のメモリとJsonサイズが必要です(これはうまくいくかもしれません)

関連する問題