HttpClient ответ только одной строкой XML

1

Я использую HttpClient для извлечения XML файла, и у меня возникают проблемы с возвратом всего документа (он возвращает только одну строку XML файла). Итак:

DefaultHttpClient c = new DefaultHttpClient();
BasicResponseHandler r = new BasicResponseHandler();

String s = null;
try
{
    s = c.execute(new HttpGet("http://localhost/activity.xml"), r);
}
catch (Exception e)
{
    e.printStackTrace();
}

Log.i(TAG, s);

Результирующая строка всегда просто <?xml version="1.0" encoding="UTF-8"?>

Есть ли что-то, что мне нужно сделать, чтобы сообщить HttpClient загрузить весь файл или обработать новые строки или что-то еще? XML очень прост:

<?xml version="1.0" encoding="UTF-8"?>
<project>
    <group-id type="integer">2187</group-id>
    <icon type="integer">2</icon>
    <name>Android</name>
    <overview>android app</overview>
    <permalink>codebase</permalink>
    <start-page>tickets</start-page>
    <status>active</status>
</project>
Теги:
httpclient

2 ответа

1
Лучший ответ

Если вы передаете BasicResponseHandler в качестве обработчика ответа, результатом execute должен быть весь тело ответа.

Если вы получаете только одну строку, моя теория заключается в том, что это все, что отправляет сервер.

Взгляните на журналы сервера, чтобы узнать, генерируется ли исключение, когда оно генерирует тело ответа. (Если вы используете JSP для выполнения рендеринга, то исключенное сообщение не может быть отправлено клиенту с помощью кода состояния HTTP. Вместо этого клиент увидит ответ 200 с усеченным телом.)

  • 0
    Ничего в логах. На данный момент это просто статический файл XML. Я могу указать на URL в браузере, и он отображается просто отлично. Очень смущен, так как он работал несколько дней назад.
  • 0
    Я только что перезагрузил IntelliJ и эмулятор, и теперь он загружает все тело. Я думаю, что-то не так с моим AVD. Спасибо, в любом случае.
1

Попробуйте это.

HttpResponse response = client.execute(request);
            in = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));

            StringBuffer sb = new StringBuffer("");
            String line = "";
            String NL = System.getProperty("line.separator");
            while((line = in.readLine()) != null){
                sb.append(line + NL);
            }
            in.close();

            String page = sb.toString();
            Log.d("Join", page);

И если вы хотите получить только XML-данные, лучше расширить DefaultHandler. И используйте парсер, такой как SAXParser, XMLReader.

  • 0
    Спасибо за совет. Я использую DefaultHandler и SAX. Я просто писал это, чтобы понять, почему мой XML не загружался полностью.
  • 0
    Тогда вам следует использовать этот формат, так как <attr_name data = "some data" /> см. Этот google.co.kr/ig/api?weather=NY

Ещё вопросы

Сообщество Overcoder
Наверх
Меню