Строка возврата из Pache-запроса Apache Http (Android) - PullRequest
0 голосов
/ 26 октября 2018

Я пытаюсь получить строку json из HTTP-запроса на публикацию в моем приложении andorid.Используя решение из этого сообщения , код также показан здесь.

public void post(String completeUrl, String body) {
HttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(completeUrl);
httpPost.setHeader("Content-type", "application/json");
try {
    StringEntity stringEntity = new StringEntity(body);
    httpPost.getRequestLine();
    httpPost.setEntity(stringEntity);

    httpClient.execute(httpPost);
} catch (Exception e) {
    throw new RuntimeException(e);
}
}

Я вызываю сообщение изнутри асинхронной задачи (используя для обработки доступа к сети в отдельном потоке).

String result;
result = post("https://StringURLGoesHere.com/", "jsonStringBodyGoesHere");

Согласно документации для класса HttpClient , для обработки ответа мне необходимо добавить второй параметр ResponseHandler в метод HttpClient.execute ().

public interface ResponseHandler<T> {
T handleResponse(HttpResponse var1) throws ClientProtocolException, IOException;
}

Я сделал так:

public String post(String completeUrl, String body) {
        HttpClient httpClient = new DefaultHttpClient();
        HttpPost httpPost = new HttpPost(completeUrl);
        httpPost.setHeader("Content-type", "application/json");
        try {
            StringEntity stringEntity = new StringEntity(body);
            httpPost.getRequestLine();
            httpPost.setEntity(stringEntity);

            ResponseHandler<String> reply = new ResponseHandler<String>() {
                @Override
                public String handleResponse(HttpResponse httpResponse) throws ClientProtocolException, IOException {
                    return httpResponse.toString();
                }
            };
            return httpClient.execute(httpPost,reply);


        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

Я показываю строку в виде текста в моем приложении.Он гласит:

org.apache.http.message.BasicHttpResponse@1446ef0c

или

org.apache.http.message.BasicHttpResponse@b83bd3d

или

org.apache.http.message.BasicHttpResponse@1c4c9e1d

и так далее.

Почему я получаю этот возврат в виде строки?Что следует изменить, чтобы получить строку объекта json, возвращаемую после записи?

Ответы [ 2 ]

0 голосов
/ 26 октября 2018

Вы можете сделать так:

    httpPost.setEntity(entity);
    HttpResponse response = httpclient.execute(httpPost);
    String responseString = new BasicResponseHandler().handleResponse(response);
    return responseString;  //this is your want
0 голосов
/ 26 октября 2018
Try like below to capture HttpRepose to see your response;
HttpClient request = HttpClientBuilder.create().build();        
HttpGet get = new HttpGet(url);
get.setHeader( "Authorization", token);
HttpResponse response = null;
try {
     response = request.execute( get );
} catch ( ClientProtocolException e ) {
     // TODO Auto-generated catch block
     e.printStackTrace();
} catch ( IOException e ) {
    // TODO Auto-generated catch block
     e.printStackTrace();
}

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

StringBuffer result = new StringBuffer();
String line = "";
while ( (line = rd.readLine()) != null ) {
      result.append( line );
}

System.out.println( response.getStatusLine().getStatusCode() );
System.out.println( result.toString() );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...