私はREST-fulエンドポイントとJSON経由でサーバーと通信するアンドロイドクライアントを持っています。このため、ハッシュに変換する前に、完全なサーバー応答を取得する必要があります。しかし、私は上のOutOfMemory例外を除いて、クライアントからフィールドでのクラッシュの報告を見ています、コードはほとんどの部分のために働くAndroid:メモリ不足でストリームをストリングに変換する
private static String convertStreamToString(InputStream is) {
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
StringBuilder sb = new StringBuilder();
String line = null;
try {
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return sb.toString();
}
:私は(インターネットのどこかにあります)があることを行うための場所でこのコードを持っていますライン:
while ((line = reader.readLine()) != null) {
フルスタックトレースは次のとおりです。
java.lang.RuntimeException: An error occured while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:200)
at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
at java.util.concurrent.FutureTask.run(FutureTask.java:137)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561)
at java.lang.Thread.run(Thread.java:1102)
Caused by: java.lang.OutOfMemoryError
at java.lang.String.(String.java:468)
at java.lang.AbstractStringBuilder.toString(AbstractStringBuilder.java:659)
at java.lang.StringBuilder.toString(StringBuilder.java:664)
at java.io.BufferedReader.readLine(BufferedReader.java:448)
at com.appspot.myapp.util.RestClient.convertStreamToString(RestClient.java:303)
at com.appspot.myapp.util.RestClient.executeRequest(RestClient.java:281)
at com.appspot.myapp.util.RestClient.Execute(RestClient.java:178)
at com.appspot.myapp.$LoadProfilesTask.doInBackground(GridViewActivity.java:1178)
at com.appspot.myapp.$LoadProfilesTask.doInBackground(GridViewActivity.java:1)
at android.os.AsyncTask$2.call(AsyncTask.java:185)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
... 4 more
私の質問:サーバーからのデータの小さな塊を送るとは別に、この問題を解決する方法はありますか?
ありがとうございます!
私は一度にメモリ内の全応答を持つ必要性を見ていませんよ。あなたはそれについて詳述できますか? –
私はorg.json.JSONObjectクラスを使用していましたが、これは標準でAndroidに付属しており、ストリーミングAPIはありません。しかし、それは私が調査するストリームAPIを持っていることが判明しました... – esilver