В настоящее время я хочу перенести данные с удаленного сервера, захватив распечатанные данные через PHP, который впоследствии сохраняется в базе данных SQLite устройства.
Проблема в том, что иногда мне нужно получить более 6000 строк из таблицы , неэффективно хранить все эти данные в оперативной памяти устройства (переменные), поэтому мне было интересно, если кто-то, пожалуйста, мог бы подсказать, как сохранить входящие данные в памяти устройства (sd, активы или ресурсы) и удалить их после обработки в базе данных SQLite. Метод, который я сейчас использую для получения данных, таков:
public JSONArray requestTable(List<NameValuePair> nameValuePairs) throws ClientProtocolException, IOException, JSONException, UnknownHostException, ConnectTimeoutException
{
//NameValuePairs contains the Query so it can be catched by php's $_POST
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(http://something.php);
HttpParams httpparams = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpparams, msTimeout);
JSONArray tableData = null;
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs, HTTP.UTF_8));
HttpResponse httpresponse = httpclient.execute(httppost);
Log.i("How are you?", httpresponse.getStatusLine().toString());
HttpEntity entity = httpresponse.getEntity();
if (entity != null)
{
InputStream instream = entity.getContent();
String result= convertStreamToString(instream);
if(result.charAt(0) == '<')
Log.e("php error", result);
else
tableData = new JSONArray(result);
instream.close();
httpresponse = null;
return tableData;
}
else
return null;
private static String convertStreamToString(InputStream is) {
BufferedReader reader = new BufferedReader(new InputStreamReader(is), 16 * 1024);
StringBuilder sb = new StringBuilder();
String line = null;
try {
while ((line = reader.readLine()) != null)
{
sb.append(line);
}
}
catch (IOException e)
{
e.printStackTrace();
}
finally
{
try
{
is.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
return sb.toString();
}
Используя этот метод, я получаю эту ошибку:
01-22 17:43:54.098: INFO/dalvikvm-heap(380): Grow heap (frag case) to 18.874MB for 2834992-byte allocation
01-22 17:44:06.368: INFO/dalvikvm-heap(380): Forcing collection of SoftReferences for 4252484-byte allocation
01-22 17:44:08.490: ERROR/dalvikvm-heap(380): Out of memory on a 4252484-byte allocation.
01-22 17:44:08.490: INFO/dalvikvm(380): "Thread-8" prio=5 tid=7 RUNNABLE
01-22 17:44:08.490: INFO/dalvikvm(380): | group="main" sCount=0 dsCount=0 s=N obj=0x44f182d8 self=0x118bf8
01-22 17:44:08.490: INFO/dalvikvm(380): | sysTid=389 nice=0 sched=0/0 cgrp=default handle=2525744
01-22 17:44:08.498: INFO/dalvikvm(380): | schedstat=( 328938307540 280414788056 42400 )
01-22 17:44:08.498: INFO/dalvikvm(380): at java.lang.AbstractStringBuilder.enlargeBuffer(AbstractStringBuilder.java:~97)
01-22 17:44:08.498: INFO/dalvikvm(380): at java.lang.AbstractStringBuilder.append0(AbstractStringBuilder.java:136)
01-22 17:44:08.498: INFO/dalvikvm(380): at java.lang.StringBuilder.append(StringBuilder.java:272)
01-22 17:44:08.498: INFO/dalvikvm(380): at java.io.BufferedReader.readLine(BufferedReader.java:452)
01-22 17:44:08.498: INFO/dalvikvm(380): at srdroid.cata.Server.convertStreamToString(Server.java:628)
01-22 17:44:08.498: INFO/dalvikvm(380): at srdroid.cata.Server.requestTable(Server.java:226)
01-22 17:44:08.498: INFO/dalvikvm(380): at srdroid.cata.Server$2.run(Server.java:418)
01-22 17:44:08.498: INFO/dalvikvm(380): at java.lang.Thread.run(Thread.java:1096)
Извините за длинный пост, любая помощь будет принята с благодарностью!