Как написать, чтобы программа отправляла запрос по заданному адресу сайта, получала xml файл и извлекала из него данные?

Как написать, чтобы программа отправляла запрос по заданному адресу сайта, получала xml файл и извлекала из него данные? Если можете опишите подробно. Если можете хотя бы часть этого процесаа полностью объясните.
  • Вопрос задан
  • 3817 просмотров
Решения вопроса 1
palmut
@palmut
Вопрос из разряда — как написать программу для Android. :)

Схема такова:
1. Формируем запрос
2. Если удачно — запускаем парсер
3. Возвращаем данные

Сам процесс хорошо бы запускать не в UI треде, т.е. надо использовать Thread, AsyncTask или AsyncTaskLoader (от ситуации зависит).

Выглядит примерно так:
	private void downloadContent() {
		HttpURLConnection connection = null;
		BufferedInputStream ins = null;
		String urlString = "<заданный адрес сайта>";

		try {
			URL url = new URL(urlString);

			connection = (HttpURLConnection) url.openConnection();
			int status = connection.getResponseCode();
			if (status == HttpURLConnection.HTTP_OK) {
				XmlPullParser parser = XmlPullParserFactory.newInstance().newPullParser();
				ins = new BufferedInputStream(connection.getInputStream());
				parser.setInput(ins, null);
				parseData(parser);
			}

		} catch (Exception e) {
			// надо обработать исключение
		} finally {
			if (ins != null) {
				try {
					ins.close();
				} catch (IOException e) {}
			}
		}

	}
	
	public void parseData(XmlPullParser parser) throws XmlPullParserException, IOException {

		int eventType = parser.getEventType();
		final String xmlTag = "rootTAG";

		do {
			if (eventType == XmlPullParser.START_TAG) {
				String name = parser.getName();
				if (xmlTag.equalsIgnoreCase(name) && (parser.getAttributeCount() > 0)) {
					for (int i = 0, N = parser.getAttributeCount(); i < N; i++) {
						// парсим атрибуты
						parseAttribute(parser.getAttributeName(i), parser.getAttributeValue(i));
					}
				}
				// парсим вложенный таг
				parseTag(parser);
			}
			eventType = parser.next();
		} while (!(eventType == XmlPullParser.END_TAG && xmlTag.equals(parser.getName()))
						&& (eventType != XmlPullParser.END_DOCUMENT));

	}



Задавайте вопросы — раскрою тему.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы