моб разраб. Лабораторные работы с 1 по 21. Лабораторная работа Использование значений строк и цветов
Скачать 5.49 Mb.
|
Использование интернет-сервисовПомимо простого отображения web-контента с помощью виджета WebView, разработчик имеет возможность «низкоуровневой работы с разнообразными сетевыми сервисами. Для этого всего лишь требуется создать сетевое подключение (запрос к серверу), получить, обработать и отобразить данные к нужном виде. Традиционно наиболее удобными форматами для сетевого обмена данными считаются XML и JSON. Разумеется, любое приложение, использующее сетевые подключения, должно иметь в Манифесте соответствующие полномочия: <uses-permission android:name="android.permission.INTERNET"/> Для создания потока данных от сервера можно использовать класс HttpUrlConnection, являющийся расширением класса UrlConnection из пакета java.net. Пакеты java.net и android.net содержат классы, позволяющие управлять сетевыми соединениями. Более подробную информацию о классе HttpUrlConnection с примерами использования можно получить здесь: http://developer.android.com/reference/java/net/HttpURLConnection.html Простой пример создания соединения: private static final String some_url = " "; . . . . try { // Создаем объект типа URL URL url = new URL(getString(R.string.rates_url)); // Соединяемся HttpURLConnection httpConnection = (HttpURLConnection) url .openConnection(); // Получаем код ответа int responseCode = httpConnection.getResponseCode(); // Если код ответа хороший, парсим поток(ответ сервера) if (responseCode == HttpURLConnection.HTTP_OK) { // Если код ответа хороший, обрабатываем ответ InputStream in = httpConnection.getInputStream(); } else { // Сделать извещения об ошибках, если код ответа нехороший } } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } Лабораторная работа «Использование сетевых сервисов» Целью данной работы является создание простого приложения, получающего курсы иностранных валют по отношению к рублю с сайта ЦБ РФ в формате XML и отображающего данные в виде списка (ListView). Для получения данных будет использоваться URL http://www.cbr.ru/scripts/XML_daily.asp Ответ сервера выглядит примерно так: . . . . . . . . Для каждой валюты (элемент Valute) потребуется извлечь значения дочерних элементов CharCode, Nominal, Name и Value. Значение атрибута Date корневого элемента (ValCurs) будет использоваться для изменения заголовка приложения. Создайте новый проект CurrencyRates. Главная (и единственная) Активность с таким же именем (CurrencyRates) должна расширять класс ListActivity. Отредактируйте Манифест приложения, добавив в него необходимые полномочия и тему для Активности (android:theme="@android:style/Theme.Light"). Файл строковых ресурсов strings.xml (в каталоге res/values) отредактируйте следующим образом: "1.0" encoding="utf-8"?> <string name="app_name">Курсы ЦБ РФstring> Для отображения информации требуется создать разметку для элементов списка. В каталоге res/layout создайте файл item_view.xml со следующим содержимым: "1.0" encoding="utf-8"?> android:orientation="horizontal" > android:id="@+id/charCodeView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="#FF8" android:minWidth="45sp" android:padding="4dp" android:textColor="#00F" android:textStyle="bold" android:gravity="center" android:shadowDx="8" android:shadowDy="8" android:shadowColor="#000" android:shadowRadius="8"/> android:id="@+id/valueView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="#008" android:background="#FFE" android:minEms="3" android:padding="3dp" /> android:id="@+id/nominalView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="3dp" /> android:id="@+id/nameView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:ellipsize="marquee" android:singleLine="true" /> Вся логика приложения будет сосредоточена в классе CurrencyRates, поэтому остальные изменения будут касаться только этого класса. Добавьте необходимые константы: private final static String KEY_CHAR_CODE= "CharCode"; private final static String KEY_VALUE= "Value"; private final static String KEY_NOMINAL= "Nominal"; private final static String KEY_NAME= "Name"; Тело метода onCreate должно содержать только две строки: super.onCreate(savedInstanceState); populate(); Поскольку CurrencyRates является наследником ListActivity, вызов setContentView не требуется. Метод populate будет наполнять ListView содержимым с помощью адаптера (SimpleAdapter), заполнив его данными, полученными от метода getData. Добавьте метод populate, в котором создается и настраивается адаптер: private void populate() { ArrayList |