0

だから私はサーバーとクライアントを持っています。

サーバーは次のように送信します

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 リクエストの後、結果の文字列が途切れます - コンテンツが消費されました

4

3 に答える 3

1

メソッド「getOutputFromUrl」では、「出力」に何も割り当てられていません

于 2013-03-12T15:10:00.557 に答える
0

問題は次のとおりです。

Stringbuilderにはすべてがありましたが、LogCatはこれを表示できません。

HTTP GETリクエストの後、結果の文字列はカットオフされます-コンテンツは消費されました

これは同じ問題です。

そこで、LogCatに文字列ビルダーを表示するために、部分文字列を作成しました。

builder.substring(0,4000);
builder.substring(0,builder.length());

ご協力いただきありがとうございます!

于 2013-03-12T17:34:06.090 に答える
0
   resp.getWriter().println(builder);

応答ライターをフラッシュして閉じ、文字列全体が一貫してソケットに書き込まれるようにします。また、output を返す前に値を割り当てます。

于 2013-03-12T15:17:12.103 に答える