その情報をJSONとしてダウンロードするAndroidアプリケーションがあります。
典型的なJSONダウンロードは約2,000〜3,000文字です。しかし、私はそれを強調したかったので、より大きなファイル(〜48,000文字)を作成しました。ファイルが進むにつれて、これはまだ小さく、50kb未満です。
私が抱えている問題は、ダウンロード時に16144文字のデータしか取得できないことです。つまりreader.readLine()
、と同様に、16144文字を含む1行だけが返されますclient.execute(request, new BasicResponseHandler());
。明らかに、ファイルの一部だけでは、JSON解析コードは有効なJSONオブジェクトではないため、すぐに失敗します。
発生する例外はないため、メモリ不足エラーではありません。また、この問題はHTC Desire(2.2)とGalaxy Nexus(4.1.1)でも再現可能であるため、OS固有でもありません。私はWebブラウザでURLをテストしましたが、正常に動作し、すべてのJSONが利用できるため、サーバーエラーではありません。
質問
なぜ16144文字しかダウンロードされないのか、ファイル全体をダウンロードさせる方法を誰かが指摘できますか?
方法#1
HttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet(uri);
HttpResponse response = client.execute(request);
InputStream in = response.getEntity().getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
StringBuilder str = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null)
{
str.append(line);
}
in.close();
result.setJSONResult(str.toString());
方法#2
HttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet(uri);
HttpResponse response = client.execute(request);
String json = client.execute(request, new BasicResponseHandler());
result.setJSONResult(json);
注-URLはLANネットワーク(http://192.168.0.99:8080 ...)にあるため、役に立たないため、ここには含めませんでした。
更新-修正
問題を修正しました。結局、私はそれを電話のメモリ制限ではなくファイル転送の問題に置きました。PC(Chrome)で動作していましたが、Android以外の場所(Webサイトなど)で壊れていて、他のブラウザー(Safari)が生のAPI呼び出しで動作しなかったことがわかりました。根本的な問題は、Webサーバーのプロキシngixであり、より大きな応答(32kb以上)をバッファリングしたかったのですが、バッファリングに使用したサーバーフォルダーへの書き込み権限がありませんでした。これは、ファイルの一部を送信し、バッファリングを開始し、書き込みができなかったために重大なエラーが発生したことを意味します。エラーが発生すると、ファイルの残りの部分の送信が停止したため、異常なバイト数で停止しました。ご協力ありがとうございます!