だから私はサーバーとクライアントを持っています。
サーバーは次のように送信します
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException
StringBuilder builder = new StringBuilder();
resp.setContentType("text/plain");
DO A LOT OF THINGS AND WRITE IT INTO ONE JSONARRAY
builder.append(JsonArray.toString());
resp.getWriter().println(builder);
}
クライアントは次のように受け取ります。
private class GetXMLTask extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... urls) {
String output = null;
for (String url : urls) {
output = getOutputFromUrl(url);
}
return output;
}
private String getOutputFromUrl(String url) {
String output = null;
try {
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(url);
HttpResponse httpResponse = httpClient.execute(httpGet);
HttpEntity httpEntity = httpResponse.getEntity();
InputStream in = httpEntity.getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
String line = "";
StringBuilder builder = new StringBuilder();
while ((line = reader.readLine()) != null) {
builder.append(line + "\n");
}
Log.i("Test", builder.toString());
in.close();
httpClient.getConnectionManager().shutdown();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return output;
}
クライアントは非同期タスクからデータを取得します。
問題は、クライアントがサーバーからの送信全体を受信しないことです。reader.read() を作ってみましたが、同じ問題があります。
ブラウザでコードを取得しようとすると、サーバーからすべてのデータを受信しますが、Java アプリケーションでは受信しません。したがって、サーバーは完全に正しいので、jsonarray を変更して、各 jsonobject の後に \n を追加できます。
文字列が長すぎるため、文字列に問題があるため、logcat に問題がある可能性はありますか?
ご協力いただきありがとうございます。
EDIT: CLOSED HTTP GET リクエストの後、結果の文字列が途切れます - コンテンツが消費されました