Как распечатать возвращенное сообщение от HttpResponse? - PullRequest
23 голосов
/ 04 апреля 2010

У меня есть этот код на моем телефоне Android.

   URI uri = new URI(url);
   HttpPost post = new HttpPost(uri);
   HttpClient client = new DefaultHttpClient();
   HttpResponse response = client.execute(post);

У меня есть веб-приложение asp.net, которое загружает эту страницу

 Response.Output.Write("It worked");

Я хочу получить этот ответ от HttpReponse и распечатать его. Как мне это сделать?

Я пытался response.getEntity().toString(), но кажется, что он просто печатает адрес в памяти.

Спасибо

Ответы [ 5 ]

38 голосов
/ 04 апреля 2010

Использование ResponseHandler. Одна строка кода. См. здесь и здесь для примеров проектов Android, использующих его.

public void postData() {
    // Create a new HttpClient and Post Header
    HttpClient httpclient = new DefaultHttpClient();
    HttpPost httppost = new HttpPost("http://www.yoursite.com/user");

    try {
        // Add your data
        List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
        nameValuePairs.add(new BasicNameValuePair("id", "12345"));
        nameValuePairs.add(new BasicNameValuePair("stringdata", "AndDev is Cool!"));
        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

        // Execute HTTP Post Request
        ResponseHandler<String> responseHandler=new BasicResponseHandler();
        String responseBody = httpclient.execute(httppost, responseHandler);
        JSONObject response=new JSONObject(responseBody);
    } catch (ClientProtocolException e) {
        // TODO Auto-generated catch block
    } catch (IOException e) {
        // TODO Auto-generated catch block
    }
} 

добавить комбинацию этого поста и завершить HttpClient по адресу - http://www.androidsnippets.org/snippets/36/

8 голосов
/ 07 апреля 2010

Я бы просто сделал это по-старому. Он более пуленепробиваемый, чем ResponseHandler, на случай, если в ответе вы получите контент другого типа.

ByteArrayOutputStream outstream = new ByteArrayOutputStream();
response.getEntity().writeTo(outstream);
byte [] responseBody = outstream.toByteArray();
6 голосов
/ 03 января 2013

Я использовал следующий код

BufferedReader r = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));

StringBuilder total = new StringBuilder();

String line = null;

while ((line = r.readLine()) != null) {
   total.append(line);
}
r.close();
return total.toString();
4 голосов
/ 28 декабря 2012

Этот код будет возвращать все ответное сообщение в response как String, а код состояния в rsp как int.

respond = response.getStatusLine().getReasonPhrase();

rsp = response.getStatusLine().getStatusCode();`
1 голос
/ 18 сентября 2018

Самый простой подход, вероятно, использует org.apache.http.util.EntityUtils:

String message = EntityUtils.toString(response.getEntity());

Он читает содержимое объекта и возвращает его в виде строки. Содержимое преобразуется с использованием набора символов из объекта (если есть), в противном случае используется «ISO-8859-1».

При необходимости вы можете явно передать набор символов по умолчанию - например,

String message = EntityUtils.toString(response.getEntity(). "UTF-8");

Он получает содержимое объекта в виде строки, используя предоставленный набор символов по умолчанию, если в объекте ничего не найдено. Если переданный набор символов по умолчанию равен нулю, используется значение по умолчанию «ISO-8859-1».

...