2011-02-09 4 views
1

Я использую HttpClient для извлечения XML-файла, и у меня возникают проблемы с возвратом всего документа (он возвращает только одну строку XML-файла). Итак:Ответ HttpClient только на одну строку 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> 

ответ

1

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

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

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

+0

Ничего в журналах. На данный момент это всего лишь статический XML-файл. Я могу указать URL-адрес в браузере, и он отображается просто отлично. Очень смутно, поскольку это работало несколько дней назад. – typeoneerror

+0

Я только что перезагрузил IntelliJ и эмулятор, и теперь он загружает все тело. Я думаю, это было что-то не так с моим AVD. Спасибо, в любом случае. – typeoneerror

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 не был полностью загружен. – typeoneerror

+0

Затем вы должны использовать этот формат как см. Это http://www.google.co.kr/ig/api?weather=NY – KJLucid

Смежные вопросы