Android против Java на ПК: отличается HttpResponse? - PullRequest
1 голос
/ 03 ноября 2011

Я запускаю один и тот же код на своем ПК (Windows 7 64-битная, Eclipse, Java) и на виртуальной машине Android, и я получаю разные результаты.

Это небольшая программа, которая должна полностью напечатать мне HttpResponse какСтрока.

Результаты на ПК:

HTTP / 1.1 405 Метод не разрешен [Разрешено: GET, HEAD, Дата: чт, 03 ноября 2011 17:57:22 GMT, содержание-Тип: текст / HTML;charset = UTF-8, сервер: gws, длина контента: 11816, защита X-XSS: 1;mode = block, X-Frame-Options: SAMEORIGIN]

Результат на Android:

org.apache.http.message.BasicHttpResponse@44ec9da8

Код, который я запускал на ПК, был:

HttpClient httpclient = new DefaultHttpClient();
    HttpPost httppost = new HttpPost(
            "http://www.google.com");

    try {
        HttpResponse response = httpclient.execute(httppost);
        System.out.println(response.toString());

И на Android:

HttpClient httpclient = new DefaultHttpClient();
    HttpPost httppost = new HttpPost(
            "http://www.google.com");

    try {
        HttpResponse response = httpclient.execute(httppost);
        return response.toString();

Я спрашиваю, потому что я написал приложение, которое будет работать на ПК - работает с контентом HttpResponse - но на Android кажется, что он вообще не имеет контента ...

Может кто-нибудь объяснить мне это?Или подскажите, как получить ответный контент (заголовки) в виде String на android?

Ответы [ 2 ]

2 голосов
/ 03 ноября 2011

Вы на самом деле не запускаете тот же код.

Android BasicHttpResponse в настоящее время вообще не имеет метода toString() и продолжает вызывать java.lang.Object.toString(), давая вам fully.qualified.class.name@hashcode.

В вашей версии HttpClient для настольного компьютера, скорее всего, есть toString (), похожая на эту из HttpClient 4.1.3 :

public String toString() {
    return this.statusline + " " + this.headergroup;
}

Использование toString() длялюбые не связанные с отладкой / регистрацией цели не являются хорошей практикой - вы должны извлечь нужную информацию с использованием реальных методов get или просто вернуть сам HttpResponse.

2 голосов
/ 03 ноября 2011

Это потому, что HttpResponse.toString () реализован по-разному на Android и на ПК (разные реализации компонентов jvm и framework!).Чтобы получить HttpHeaders правильно, я думаю, вам нужно использовать что-то вроде:

http://developer.android.com/reference/org/apache/http/HttpMessage.html#getAllHeaders%28%29

В любом случае см. Javadoc для справки по этому вопросу.

...