Первый программист Java. Мне интересно, какие у меня варианты загрузки XML на платформе Android (java). Существует несколько документов/демонстраций по подключению и загрузке данных (AFAIK). Мне нужно подписать запрос с базовой аутентификацией, а затем GET/POST/PUT/DELETE на URL-адрес, который будет возвращать тип содержимого приложения /xml. В основном мне нужно подражать этому типу запроса cURL в Java:
curl -H 'Content-type: application/xml' -H 'Accept: application/xml' \
-u '{account}/{username}:{apikey}' https://mywebsite.com
Должен ли я просто использовать HttpClient
в org.apache или есть лучшее решение? Как только я загрузил XML-ответ из моего API, что такое рекомендуемый парсер для Android. Кажется, что для Java очень много парсеров, я полностью перегружен.
Конечно, используйте HTTPClient, он должен работать на Android, и гораздо проще сделать звонки, чем писать самостоятельно... вот пример: -
// Create a new HttpClient and Post Header
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://www.yoursite.com/script.php");
try {
// Add your data
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
nameValuePairs.add(new BasicNameValuePair("id", "12345"));
nameValuePairs.add(new BasicNameValuePair("stringdata", "AndDev is Cool!"));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
// Execute HTTP Post Request
HttpResponse response = httpclient.execute(httppost);
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
} catch (IOException e) {
// TODO Auto-generated catch block
}
Я предпочитаю Jersey client себе:
Зависимость:
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-client</artifactId>
<version>1.5</version>
</dependency>
Пример:
WebResource resource = Client.create().resource("http://www.site.com/");
ClientResponse response = resource.path("user/list").header("foo", "bar").type(MediaType.TEXT_PLAIN).post("Awesome Sauce!", ClientResponse.class);
String responseBody = response.getEntity(String.class);
System.out.println(responseBody);
Но HttpClient
, безусловно, будет работать.
Для парсеров мне нравится JAXB, XStream, XPP, JDOM, или всегда существует Java DOM API. Есть куча XML-библиотек, которые вы можете использовать в Google. XPP является легким и быстрым, что может хорошо работать для Android.
Одним из лучших примеров, которые я видел, является приложение "Полки" от Ромена Гая (инженера Google, работающего на Android):
http://code.google.com/p/shelves/
Приложение выполняет HTTP-запросы к службе Google Books и анализирует полученный XML-код. Есть и другие примеры, плавающие вокруг. Но поскольку приложение "Полки" происходит от одного из людей Google, у меня всегда было больше веры в него, демонстрируя лучшие практики, чем другой код, с которым я сталкиваюсь.
Современное состояние для вызова сервисов REST было представлено автором официального приложения twitter в Google IO 2010. Что касается разбора XML, я обычно использую парсер партитуры, встроенный в SDK.
Для платформы REST более высокого уровня посмотрите Spring Android.