2013-11-29 4 views
0

Это мой код, и моя строка line не читает весь ответ:Как получить огромные данные JSON из HTTP в Android?

int bufferSize = 10240 ; // 10KB. 
    BufferedReader reader = new BufferedReader(new InputStreamReader(inStream),bufferSize); 
    StringBuilder sb = new StringBuilder(); 

    String line = null; 
    try { 
     while ((line = reader.readLine()) != null) { 
      sb.append(line + "\n"); 
     } 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } finally { 
     try { 
      inStream.close(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
    return sb.toString(); 

Заранее спасибо

+1

Что вы ожидаете и где ваша проблема? Пожалуйста, будьте более конкретными. – AlexS

+0

while ((line = reader.readLine())! = Null). Строка не читает весь контент. Он останавливается на полпути. Мой ответ от HTTP большой, и он только читает половину моего ответа –

+0

Я также пытаюсь найти код, в котором я могу написать httpresponse непосредственно в файл. Из файла, который я хотел бы сохранить в SQLite. –

ответ

0

Вы должны получить полный ответ как String с sb.toString().

Если вы хотите сохранить результат непосредственно в файл вы можете использовать что-то вроде этого:

private void storeToFile(InputStream input, String destFilename) { 
    FileOutputStream fos = null; 
    try { 
     byte[] buffer = new byte[2048]; 
     fos = new FileOutputStream(destFilename, false); 

     int read = 0; 
     while (read >= 0) { 
      if (read > 0) { 
       fos.write(buffer, 0, read); 
       fos.flush(); 
      } 
      read = input.read(buffer, 0, buffer.size()); 
     } 
    } catch (Exception ex) { 
     Log.e(getClass().getName(), "error saving stream", ex); 
    } finally { 
     if (fos != null) { 
      try { 
       fos.close(); 
      } catch (Exception ex) { 
      } 
      fos = null; 
     } 
    } 
} 

Конечно, вы можете также хранить ответ как blob или String в SQLite, но я предпочел бы магазин ответ как частный файл с использованием openFileOutput(destFilename, Context.MODE_PRIVATE) вместо new FileOutputStream(destFilename, false). Затем вы можете сохранить имя файла в своей базе данных SQLite. Это уменьшит размер файла SQLite-DB и ваши запросы будут быстрее. Но вы не можете использовать свой answeretext в качестве фильтра в своих запросах.

+0

Спасибо. Было очень полезно –

+0

Вы можете принять ответ, если он решил вашу проблему и ответил на ваш вопрос. – AlexS

Смежные вопросы