2015-10-08 53 views
0

我想獲得一個JSON答案類型,但到大,在50 MB的Android工作室拋出新的異常內存不足內存不足JSON的Android

class MyClass extends AsyncTask<Void, Void, Void> 
{ 
String result=""; 

@Override 
protected Void doInBackground(Void... params){ 

HttpClient httpClient=new DefaultHttpClient(); 
String URL="http://82.79.121.114:1001/api/search/category/3,1,1"; 

try{ 

HttpGet httpGet = new HttpGet(URL); 

httpGet.setHeader("Authorization", "Bearer " + AccesToken); 

HttpResponse httpResponse=httpClient.execute(httpGet); 
//Log.e("EROARE!!!!!!","EROARE!!!!!"); 

HttpEntity httpEntity=httpResponse.getEntity(); 

InputStream is=httpEntity.getContent(); 

result=convert(is); 

}catch (Exception e){ 

e.printStackTrace(); 
} 
return null; 
} 

@Override 
protected void onPostExecute(Void aVoid){ 

Toast.makeText(MainActivity.this,result,Toast.LENGTH_SHORT).show(); 

if(result.length() == 0 || result == null) 
{ 
Toast.makeText(MainActivity.this,result.Toast.LENGTH_SHORT).show(); 

if(result.length() == 0 || result == null) 
{ 
Toast.makeText(MainActivity.this,"Nu merge!!!",Toast.LENGTH_SHORT).show(); 
} 
} 

public String convert(InputStream is) throws IOException { 
BufferedReader reader = null; 
StringBuffer buffer = new StringBuffer(); 
try { 

reader = new BufferedReader(new InputStreamReader(is,"UTF-8"),8192); 
int read; 
char[] chars = new char[1024]; 
while ((read=reader.read(chars)) != -1) 
buffer.append(chars, 0, read); 

} 
finally { 
if (reader != null) 
reader.close(); 
} 
return buffer.toString(); 
} 
+0

世界上什麼使50mb JSONs – poss

回答

0

你的JSON對象實在太大,因爲大部分設備沒有這麼大的堆。如果您擁有服務器端,您應該更改發送給客戶端的響應,並將其作爲單獨響應進行處理。

此外,我建議您重新考慮爲什麼您一次發送如此多的數據。即使在平均網絡連接上加載也需要很長時間。

0

如果確實OutOfMemory問題與您的REST服務返回的數據大小有關,那麼您在服務器端和客戶端都會出錯。一個移動應用程序應該關心用戶的數據流量,並關心他們的電池,所以不是一次性加載整個JSON,也許你可以將它拆分成頁面,並且只加載第一頁。一旦用戶感興趣的更多(也許你正在使用一個ListView來顯示這些類別),然後你加載下一頁等等。請參閱Android的無盡列表模式這裏: https://github.com/codepath/android_guides/wiki/Endless-Scrolling-with-AdapterViews