2014-03-06 47 views
0

嗨,我正在解析來自JSON的數據。在解析數據時,我得到了OUT OF MEMORY錯誤和dalvik-heap。如何從這個問題中解脫出來。我在網上搜索,我沒有找到任何解決方案,請幫助我。解析JSON android中的數據時內存不足?

預先感謝

8月3日至6日:19:00.618:E/dalvikvm堆(1415):在對上的2506782字節的分配存儲器。這個

JSONObject jsonObj1 = new JSONObject(jsonStr1); 

      ArrayList<String> matter1= new ArrayList<String>(); 

      String stat = jsonObj1.getString(TAG_stat); 
      String suc=jsonObj1.getString(TAG_success); 

      // Getting JSON Array node 
      matter = jsonObj1.getJSONArray(TAG_mdata); 

      // looping through All Contacts 

      dbdata =new ArrayList<String>(); 

      for (int i = 0; i < matter.length(); i++) { 

       JSONObject j = matter.getJSONObject(i); 

       String ddesc= j.getString(TAG_ddesc); 
       String spd= j.getString(TAG_sped); 
       String gzid=j.getString(TAG_geozid); 
       String dev = j.getString(TAG_devid); 
       matter1.add(stat); 
       matter1.add(suc); 

       Log.v("contact", ""+matter1); 

       dbdata.add(ddesc); 
       dbdata.add(spd); 
       dbdata.add(gzid); 
       dbdata.add(dev); 


       dbdata1.add(dbdata); 
+0

將一些dta刪除到您的設備中。 –

+0

設備中沒有數據。 –

+0

請參閱我的答案bro.hope它的工作。 –

回答

0

一個奇怪的是,崩潰只發生在應用程序運行的每2或第3次,讓我相信,通過應用程序所消耗的內存不被垃圾每個應用程序關閉時收取。

這當然是可能的,如果是這種情況,那麼它可能是由於內存泄漏,可以追溯到您的應用程序正在做的事情。我認爲你應該將最初的努力集中在調查這方面......而不是將文件加載到塊中。 (我不熟悉Android工具鏈,但我相信它包括內存使用分析器或內存轉儲分析儀。)

編輯

在回答您的後續評論,事實上,它的工作原理2倍在3中表明你的應用程序應該大致按原樣工作。無可否認,如果輸入文件變大,你沒有太大的餘地。

一對夫婦的想法,但:

而不是把文件讀入一個字符串,並運行對字符串的JSON解析器,使用解析器,可以直接從流中讀取。當您解析時,您當前的解決方案需要在內存中留出兩個完整數據副本的空間。

如果文件變得更大,您可能需要考慮不會創建數據的完整內存中表示的設計。

我不確定在「塊」中讀取JSON文件是個好主意。這可能會導致JSON解析出現問題......具體取決於您讀取塊的含義。

+0

第一次只有我的應用程序沒有打開? –

+0

張貼您的代碼兄弟.. –

+0

任何錯誤的兄弟.. –

0

使用Gson庫。將優化您的所有流程。