Я использую 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>
Если вы передаете BasicResponseHandler
в качестве обработчика ответа, результатом execute
должен быть весь тело ответа.
Если вы получаете только одну строку, моя теория заключается в том, что это все, что отправляет сервер.
Взгляните на журналы сервера, чтобы узнать, генерируется ли исключение, когда оно генерирует тело ответа. (Если вы используете JSP для выполнения рендеринга, то исключенное сообщение не может быть отправлено клиенту с помощью кода состояния HTTP. Вместо этого клиент увидит ответ 200 с усеченным телом.)
Попробуйте это.
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.