Diplom


МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РФ
ФГБОУ ВО «БУРЯТСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ»
ФИЗИКО-ТЕХНИЧЕСКИЙ ФАКУЛЬТЕТ
КАФЕДРА ВЫЧИСЛИТЕЛЬНОЙ ТЕХНИКИ И ИНФОРМАТИКИ
ДОПУСТИТЬ К ЗАЩИТЕ
Зав. кафедрой ВТИ
к.т.н., доцент Урмакшинова Е.Р.
______________________
«____»________2017 г.
ВЫПУСКНАЯ КВАЛИФИКАЦИОННАЯ РАБОТА БАКАЛАВРА
направление подготовки
09.03.02 Информационные системы и технологии
на тему:
Разработка мобильного приложения «Расписание университета»
на платформе Android
Выполнила: Куулар Чейнеш Васильевна
Научный руководитель: Мархакшинов Аюр ЛувсаншаравовичУлан-Удэ
2017 г.
Содержание
Введение
Главное направление совершенствования мобильных телефонов можно определить одним понятием: конвергенция технологий. Мобильные телефоны объединили в себе едва ли не всё, что можно и разумно объединять под корпусом одного устройства.
Основные задачи телефона прошлого - совершать и принимать звонки, писать SMS. Сегодня эти задачи дополнилась работой с интернет - ресурсами, прослушиванием музыки, фотосъемкой, использованием игр и приложений. Мобильный будущего, скорее всего, добавит к списку основных задач просмотр телепрограмм, управление различной техникой, функции контроля и возможно многое другое.
Эксперты обращают внимание потребителей на тот факт, что сейчас на рынке доступно несколько мобильных платформ, стремительную популярность среди которых в последнее время приобретает iOS и Android. Программная платформа Android на мировом рынке смартфонов достигла рекордных 87,5 %. Иными словами, примерно девять из десяти аппаратов используют именно эту ОС.
Что бы ни говорили, а мобильность сегодня - явление глобальное, проникающее во многие сферы нашей жизни. Ныне потребитель ищет не просто мобильный телефон, он внимательно изучает условия, соотнося их с требованиями современного рынка. Именно поэтому можно утверждать, что развитие мобильных технологий будет только ускоряться.
Целью данной работы является разработка приложение для ОС Android, назначением которого будет доступ к расписанию Бурятского государственного университета Пользователями данного приложения будут студенты университета.
Для достижения поставленной цели требуется решить следующие задачи:
1) Изучить архитектуру, инструменты и особенности разработки приложений для ОС Android;
2) Создать макет - прототип будущей программы;
3) Разработать приложение согласно макету;
4) Разработать интерфейс пользователя;
5) Протестировать разработанное приложение.
Практическая значимость данной работы состоит в том, что результат достижения поставленной цели имеет возможность применения в деятельности конкретного учебного заведения.
Android Studio — это интегрированная среда разработки (IDE) для работы с платформой  HYPERLINK "https://ru.wikipedia.org/wiki/Android" \o "Android" Android.
Android Studio, основанная на программном обеспечении  HYPERLINK "https://ru.wikipedia.org/wiki/IntelliJ_IDEA" \o "IntelliJ IDEA" IntelliJ IDEA от компании  HYPERLINK "https://ru.wikipedia.org/wiki/JetBrains" \o "JetBrains" JetBrains, официальное средство разработки Android приложений. Данная среда разработки доступна для  HYPERLINK "https://ru.wikipedia.org/wiki/Windows" \o "Windows" Windows, OS X и  HYPERLINK "https://ru.wikipedia.org/wiki/Linux" \o "Linux" Linux.
Глава I
Достоинства и недостатки операционной системы АндроидОдной с более известных операторных концепций в подвижном торге в настоящее время считается Android — мобильная операционная система с Гугл. К сожалению, её глобальное продвижение никак не создает результат безупречным. У Дроида также имеется собственные преимущества и.
Достоинства:
Разнообразие игр и приложений. Их количество в магазинах уже давно ранее осилило миллионную оценку. Плееры, браузеры, текстовые редакторы и почти все иное – в целом на любителя.
Android – ОС с не закрытым начальным кодом.
В системе хорошо выполнена многозадачность, функционирует в то же время ряд дополнений.
Переключение между задачами происходит быстро.
Своевременные обновления фирмой Гугл проводится постоянная работа над усовершенствованием перечня возможностей операционной системы.
Недостатки:
Множество опций.
Несовместимость с устаревшими устройствами.
Принцип работы Android OS и приложений
Приложения под операционную систему Android разрабатываются в основном с использованием Java. Скомпилированный программный код (вместе со всеми файлами ресурсов и прочей необходимой информацией) упаковывается в специальный файл-архив, Android Package. Этот файл имеет расширение *.apk и упаковывается специальной утилитой aapt tool. Именно он в дальнейшем распространяется как программа и инсталлируется на мобильные устройства. Один такой файл связан с кодом одного приложения. И каждое приложение в Android живет в своем собственном мире – в такой машине. По умолчанию, каждая программа выполняется в своем собственном процессе, управлением которого занимается ядро Linux, которое также осуществляет менеджмент памяти. Таким образом, чаще всего код приложения выполняется в изоляции от всех других приложений. Android стартует процесс, когда возникает необходимость выполнить какой-нибудь программный код и завершает его, когда в нем больше нет необходимости и системные ресурсы требуются другим приложениям. По умолчанию, каждому приложению присваивается свой уникальный ID Linux-пользователя. Права доступа устанавливаются таким образом, чтобы файлы приложения были видны только этому пользователю и данному приложению. Хотя, есть способы, позволяющие экспортировать их в другие приложения. Например, существует возможность «разделения» одного и того же пользовательского ID между двумя приложениями. В таком случае, они смогут видеть файлы друг друга. Для того, чтобы экономить системные ресурсы, приложения с одинаковым ID можно также договориться запускать в одном и том же Linux-процессе, разделяя одну и ту же виртуальную машину.
Уровень среды исполнения Андроид.
В состав Android входит набор библиотек ядра, которые предоставляют большую часть функциональности библиотек ядра языка Java.
Платформа использует оптимизированную, регистр-ориентированную виртуальную машину Dalvik, в отличии от нее стандартная виртуальная машина Java – стек-ориентированная. Каждое приложение запускается в своем собственном процессе, со своим собственным экземпляром виртуальной машины. Dalvik использует формат Dalvik Executable (*.dex), оптимизированный для минимального использования памяти приложением. Это обеспечивается такими базовыми функциями ядра Linux, как организация поточной обработки и низкоуровневое управление памятью. Байт-код Java, на котором написаны ваши приложения, компилируются в dex-формат при помощи утилиты dx, входящей в состав SDK.
Библиотеки Андроид.
Платформа Android включает набор C/C++ библиотек, используемых различными компонентами ОС. Для разработчиков доступ к функциям этих библиотек реализован через использование Application Framework. Представлены некоторые из библиотек:
System C library — BSD-реализация стандартной системной библиотеки C (libc) для встраиваемых устройств, основанных на Linux.
Media Libraries – библиотеки, основанные на PacketVideo‘s OpenCORE, предназначенные для поддержки проигрывания и записи популярных аудио- и видео- форматов (MPEG4, H.264, MP3, AAC, AMR, JPG, PNG и т.п.).
Surface Manager – менеджер поверхностей управляет доступом к подсистеме отображения 2D- и 3D- графических слоев.
LibWebCore – современный движок web-браузера, который предоставляет всю мощь встроенного Android-браузера.
SGL – движок для работы с 2D-графикой.
3D libraries – движок для работы с 3D-графикой, основанный на OpenGL ES 1.0 API.
FreeType – библиотека, предназначенная для работы со шрифтами.
SQLite – мощный легковесный движок для работы с реляционными БД.
1.1 Компоненты приложений в Androidграмма приложение
Интересной чертой операционной системы Android является тот факт, что приложение в ней может использовать для своего функционала элементы других приложений, если, конечно, они предоставляют такой доступ. Например, если нашему приложению требуется отобразить прокручиваемый список изображений, а другое приложение уже имеет реализованный подходящий скроллер, открытый для других приложений, то можно просто вызвать его для осуществления этого действия и не разрабатывать свой собственный. При этом код нашего приложения не смешивается с кодом другого и не компонуется с ним. Скорее, он просто запускает некоторый кусок другого файла, когда возникает такая необходимость. Для обеспечения такого принципа работы, система должна быть способна запускать процесс приложения тогда, когда потребуется любая его часть и создавать экземпляры java-объектов именно для этой части. Поэтому приложения Android не имеют единой точки входа, как это принято в большинстве систем. Вместо этого их код представляет собой набор некоторых отдельных целостных сущностей, компонент, из которых система по мере необходимости может создавать экземпляры и использовать их.
Можно выделить четыре типа таких сущностей-компонент. Поговорим о каждой в отдельности.
Activities
Activity представляет собой внешний пользовательский интерфейс для одной операции, которую может совершить пользователь. Если упростить, то это просто один текущий экран как некоторая единица активности, своего рода кадр с одним пользовательским действием. Здесь и далее будет использоваться термин activity без перевода, как некоторое имя собственное. Хотя дословный перевод, «активность» или «действие», хорошо передает общий смысл компонента.
Например, activity может предоставить список пунктов меню, которые может выбрать пользователь или отобразить фотографии с их подписями. Или другой пример – приложение для мгновенного обмена сообщениями может использовать одно activity для того чтобы отобразить лист контактов, другое – чтобы создать сообщение для выбранного контакта, третье – чтобы посмотреть историю сообщений или выполнить настройки и так далее.
Приложение может состоять из всего одного activity или сразу из нескольких, как упомянутый ранее в качестве примера мессенджер. Какими именно будут activity и сколько их будет, зависит от конкретного приложения и его дизайна. Как правило, одно из activity помечается как первое, это означает, что оно будет предоставлено пользователю при запуске приложения. Одно activity может запускать другое. Таким образом, переход от одного activity к другому осуществляется тогда, когда текущее activity вызывает следующее.
Каждое activity предоставляет окно по умолчанию. Обычно окно создается в полноэкранном виде, но оно также может и не занимать весь экран и находиться поверх других окон. Activity также может задействовать дополнительные окна – например, всплывающее диалоговое для взаимодействия с пользователем в процессе работы activity, или окно для предоставления текущей информации при выборе какой-нибудь важной опции.
Визуальное содержание окна строится с помощью иерархии визуальных компонентов (или представлений) – объектов, производных от базового класса View. Каждый компонент представляет собой просто прямоугольное пространство внутри окна. Родительские компоненты содержат дочерние и организуют их расположение. Иерархию компонент можно представить в виде дерева, а те элементы, которые находятся в самой нижней его части (“листья”) и не имеют дочерних компонент, отрисовывают прямоугольные области и ожидают действий пользователя на этом участке. Для того чтобы поместить в окно такую иерархию, нужно вызвать метод Activity.setContentView(). Параметром метода является экземпляр класса View, лежащий в корне иерархии.
Services (сервисы) представляют из себя компоненты, которые работают в фоновом режиме. Он, как правило, требуется для длительных операций или для обеспечения работы удаленных процессов, но в общем случае это просто режим, который функционирует, когда приложение не в фокусе. Примером такого процесса может стать прослушивание музыки в то время, когда пользователь делает что-то другое или получение данных по сети без блокирования текущей активности. Сервис сам по себе не предоставляет пользовательского интерфейса, то есть с пользователем не взаимодействует, а запускается, управляется и связан с другими компонентами, например, activity. Также может запускаться вместе с системой.
Content providers Данный компонент управляет наборами данных, которые приложения предоставляют другим. Эти данные могут храниться в файловой системе, базах данных SQLite, в сети, или в любом другом постоянном месте, к которому приложение может иметь доступ. Посредством content provider другое приложение может запрашивать данные и, если выставлены соответствующие разрешения, изменять их. Например, система Android содержит content provider, который управляет пользовательской информацией о контактах. Он позволяет любому приложению, обладающему соответствующими правами вызывать составляющие этого компонента для того, чтобы считывать, записывать или изменять информацию о конкретном человеке.
Broadcast receivers. Этот компонент отвечает за распространение общесистемных сообщений, отслеживание и реагирование на действия. Многие оповещения идут от системы, например, сообщения о том, что заряд батареи мал или экран выключен. Приложения также могут инициировать такие оповещения, например, сигнализировать о том, что информация загружена на устройство и доступна к использованию. Как и сервисы, broadcast receiver не предоставляет пользовательского интерфейса, однако, он способен создавать уведомления в строке состояния, чтобы предупреждать пользователя о том, что произошло какое-то событие.
Внешний вид приложения.
«По сравнению с другими ОС, Android — одна из наиболее простых и одновременно комплексных платформ, вся система скачивается за один раз».
Большинство студентов используют телефоны с операционной системой Android, что позволяет сделать разрабатываемое приложение более доступным и тем самым обеспечивает студентам доступ к расписанию вне института.
Задачи, подлежащие автоматизации:
1. Информирование об изменениях в расписании;
2. Информирование о текущих предметах.
Данное приложение может работать как в режиме online, так и в offline. В режиме offline приложение выполняет функцию предоставления материалов с возможностью просматривать ранее сохраненные данные (предмет, время, аудитория и т. п.). В режиме online появляется возможность полного информирования.
В его основе лежит система баз данных SQLite. «SQLite» - мощная и легковесная, отличается от многих обычных движков баз данных отсутствием типизации каждого столбца.
Когда приложение использует SQLite, их связь производится с помощью функциональных и прямых вызовов файлов, содержащих данные, а не кого-то интерфейса, что повышает скорость и производительность.
Глава II
Шаблон приложения.
Приложение позволяет получить актуальное расписание для любой группы БГУ. После первой загрузки с расписанием можно работать автономно. Если будет выбрано обновление, то приложение будет отражать появившиеся изменения: название предмета, имя преподавателя, расположение и время проведения. Кроме этого, есть возможность указывать чередования недель (первая неделя / вторая неделя / текущая неделя).
Проект приложения.
Конструирование интерфейса пользователя.
Приложение с интуитивно понятным интерфейсом быстро и без особого труда позволит студентам учебного заведения получать:
актуальное расписание занятий учебной группы на неделю либо на отдельно взятый день;
расписание экзаменов, зачетов;
расписание лабораторных работ и практических занятий;
получить быстрый, простой и оперативный доступ к информации, касающейся учебного процесса - расписание занятий, экзаменов, преподавателя, аудитория, время.
В результате данное приложение упрощает повседневную жизнь студентов. Простой интерфейс делает процесс обучения более комфортным, информативным и более доступным.
Оформление стиля приложения.
К приложению применены различные стили оформления, соответствующие требованиям. Выбранный стиль оформления будет применен ко всем листам приложения. Изменение стиля приложения после разработки не поддерживается.
Параметры оформления:
- направления символов в текстовых или числовых строк;
- тема приложения по умолчанию;
- цвет фона;
- цвет шрифта;
Поиск информации. Парсинг.
Создавая веб-сайт, его владелец неизбежно сталкивается с проблемой – где брать контент (информационное содержание сайта)? Оптимальный вариант: Интернет.
Парсинг сайтов является эффективным решением для автоматизации сбора и изменения информации.
По сравнению с человеком, компьютерная программа-парсер:
- быстро обойдёт тысячи веб-страниц;
- аккуратно отделит техническую информацию от «человеческой»;
- безошибочно отберёт нужное и отбросит лишнее;
- эффективно упакует конечные данные в необходимом виде.
Требования к мобильному приложению
Мобильное приложение «Расписание БГУ» должно выполнять следующие функции:
-Просмотр расписания университета;
-Информация о текущих занятиях;
-Синхронизация информации через Интернет;
Пользователь представляет собой человека, взаимодействующего с приложением на мобильном устройстве. В данном случае пользователем является студенты Бурятского государственного университета.
Основными функциями подсистемы программно-методического комплекса является:
-Установка всех необходимых компонентов для реализации поставленной задачи;
- Поэтапная настройка среды разработки;
- Разработка графического контента приложения;
- Разработка полноценного приложения в выбранной среде разработки;
- Тестирование приложения с помощью различных средств;
- Публикации приложения.
Описание интерфейса
- Выбор иконки и название программы.
- Панель инструментов - с помощью данной панели можно копировать, вставлять, удалять различные элементы.
- Панель публикации проекта.
- Выбор телефона, под которое будет делаться приложение.
- Панель создания проекта - вкладки:
Screens - собственно, это и есть наши вкладки;
Library - библиотека элементов, из которых будем собирать наше приложение;
При входе в приложение пользователю показывается окно (рис. 1):
318262080010004514858001000
Рис. 1. Главное окно приложения
Главное окно приложения включает в себя элементы: «Расписание», «Дни недели», «Группа», кнопка «Подтвердить». При нажатии на каждую из них происходит переход на соответствующую вкладку программы. При каждом выборе определенной группы происходит обновления расписания путем http-запроса на сервер и получение в ответ http-страницы.
Вкладка «Расписание» содержит элемент «List View», с элементами с каждой из которых представляет собой вкладку с расписанием на конкретный день недели. При нажатии на вкладку происходит показ ее содержимого, которое представляет собой набор вкладок, разбитых по учебным планам (рис. 2):
Виджет ListView представляет собой прокручиваемый список элементов. Очень популярен на мобильных устройствах из-за своего удобства.
При большом количестве информации, которую надо поместить на экране необходимо использовать полосы прокрутки. В Android существуют специальные компоненты ScrolView и HorisontalView, которые считаются контейнерными элементами и наследуются от ViewGroup.
При большом количестве информации, которую нужно поместить на экране приходится использовать полосы прокрутки. В Android существуют специальные компоненты ScrollView и HorizontalScrollView, которые являются контейнерными элементами и наследуются от ViewGroup. Их использование с TextView способен улучшить вид приложения и повышает удобство работы для пользования
На панели инструментов компоненты можно найти в разделе Containers.
Виджет ScrollView, поддерживает только вертикальную прокрутку, поэтому для создания вертикальной и горизонтальной прокрутки необходимо использовать ScrollView в сочетании с HorizontalScrollView.

Рис. 2. Кнопка Подтверждения и вкладка с расписанием.
Структура навигации в приложении выглядит следующим образом (рис.3):

Рис. 3. Схема навигации мобильного приложения
Ресурсы. Реализация файлов. XML в Android.
Android представляет собой платформу с открытым кодом для разработки приложений для мобильных устройств. С ее помощью можно получить доступ ко всем компонентам устройства, на котором выполняется эта ОС, начиная от низкоуровневого программирования графики и заканчивая использования встроенной камеры.
Ресурсы – один из основных компонентов, с которыми придется работать. В Android принято держать объекты, как изображения, строковые константы, цвета, стили и т.п. за пределами исходного кода. В основном они хранятся в виде xml-файлов в каталоге res с подкаталогами values, drawable-ldpi, drawable-mdpi, drawable-hdpi, layout, но также бывают другие типы ресурсов.
Самыми распространенными ресурсами являются строки (string), цвета (color), и графические рисунки (bitmap).
Цвета, как и все остальные ресурсы, следует определять в разметке xml. Обычно цвета определяются в файле с названием colors.xml, который создается многими шаблонами приложений Android Studio (рис. 4).
06921500
224151778000
Рис. 4. Res / values / colors.xml.
Android позволяет хранить в ресурсах массивы строк. Для этого используется тег string-array, который содержит внутри элементы item с конкретными строками.
Элементы массива инициализируются, как обычные строки, а элементы item содержат только ссылку на них такая инициализация удобна. Само описание массива при этом удобно вынести в отдельный ресурсный файл (рис. 5).

Рис. 5. Res / values / string.xml.
Ресурсы размеров
В Android используются следующие единицы измерения: пикселы, дюймы, точки. Все они могут входит в состав ХМL-шаблонов и кода Jаvа. Данные единицы измерения также можно использовать в качестве ресурсов при помощи тега <dimen> (обычно используют файл dimens.xml):

Рис. 6. Res / values / attrs.xml.
Часто используемый список format (тип свойства):
dimension — может быть значение типа 10px, 10dip;
integer — может быть значение типа 10, 5, 2;
string — просто текстовое значение типа «Hello World».
Как и другие ресурсы, ресурс dimension определяется в корневом элементе <resources>. Тег <dimen> обозначает ресурс и в качестве значния принимает некоторое значение размера в одной из принятых единиц измерения (dp, sp, pt, px, mm, in).
Так, добавим в Android Studio в папку res/values новый файл, который назовем dimens.xml. Определим в нем следующее содержимое:

Рис. 7. Res / values / dimens.xml.
Здесь определены два ресурса для отступов activity_horizontal_margin и activity_vertical_margin, которые хранят значение 1 dp и 8 dp, и атрибут divider, который отвечает за внешний вид разделителя. Названия ресурсов могут быть произвольными.
Экран имеет такие физические значения как диагональ и разрешение. Диагональ – это расстояние между противоположными углами экрана, обычно измеряется в дюймах. Разрешение – количество точек по горизонтали и вертикали, которое экран способен отобразить, измеряется в пикселях.
Layout windth и Layout heigth.
На них можно указывать абсолютные значения, а можем использовать константы.
Абсолютные значения:
- dp и dip – Dencity-indenperendent Pixels. Абстракная ЕИ, позволяющая приложениям выглядеть одинаково на разных экранах и разрешениях.
- px – пиксель, не рекомендуется использовать так как на разных экранах приложение будет выглядеть по-разному.
- mm – миллиметр, определяется по физическому размеру экрана.
- in – дюйм, определяется по физическому размеру экрана.
Константы:
- math_parent (fill_parent) – означает, что элемент займет всю доступную ему в родительском элементе ширину и высоту.
- wrap_content – ширина и высота элемента будет определятся его содержимым.
Расположение View-элементов на экране зависит от ViewGroup (Layout), в которой они находятся. LinerLayout – отображает View –элементы в виде одной строки (Horizontal) или одного столбца (Vertical). Этот вид ViewGroup по умолчанию предлагается при создании новых layout-файлов. Он достаточно удобен и гибок, чтобы создавать экраны различной сложности.
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:id="@+id/activitty_main"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/acivity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"android:background="@color/background"tools:context="com.a2210.alive.mydailyscheduller.MainActivity"> <ListView android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/background" android:dividerHeight="@dimen/divider" android:divider="@color/colorPrimary" android:id="@+id/li"/></LinearLayout>Res / layout / activity_main.xml.
Суть приложения: считывание информации о занятиях с сайта университета. Приложение должно посылать запрос который содержит сведения о группе на сайт БГУ и получать ответ в виде файла с расписанием.
Выбор инструмента для получения данных.
Для получения данных парсеры взаимодействуют с разметкой документов, написанной на языке разметки HTML (либо XML). Существует 2 вида парсеров:
1) SAX (англ. Simple API for XML) – способ последовательного чтения и/или записи HTML/XML-файлов. В ходе последовательного чтения SAX-парсер сообщает вызвавшему приложению о встреченных элементах разметки, а программист в своюочередь описывает нужную обработку данных событий.
2) DOM (англ. Document Object Model) позволяет представить любой документ известной структуры в виде дерева узлов, каждый узел которого представляет собой элемент, атрибут или иной объект. Узлы связаны между собой отношениями «родитель – потомок». DOM- парсеры сначала загружают весь документ разметки, а на выходе представляют дерево, из которого можно получить доступ к содержимому документа.
Что такое Jsoup.
Jsoup это open-source Java библиотека для работы с реальным HTML. Она обеспечивает очень удобный API для извлечения и манипулирования данными, используя лучшие DOM, CSS, и JQuery-подобные методы. Jsoup реализует WHATWG HTML5 спецификацию, и разбирает HTML в ту же модель DOM, как это делают современные браузер вроде Chrome и Firefox. Вот некоторые из полезных функций Jsoup библиотеки:
- Jsoup может очистить и разобрать HTML из URL, файла или строки.
- Jsoup может найти и извлечь данные используя обход DOM или CSS селекторы.
- Jsoup позволяет манипулировать HTML элементами, атрибутами и текстом.
- «Аккуратный» HTML на выходе: при разборе HTML-текста библиотека исправляет ошибки наподобие незакрытых тегов.
Jsoup предназначен для работы с различными видами HTML существующими в реальном мире, включая должным образом подтвержденный HTML c неполным неподтвержденным набором тэгов. Одно из основных преимуществ Jsoup это его надежность. С помощью него очень просто разобрать HTML, все что Вам нужно это вызвать статический метод Jsoup.parse() и передать в него Вашу HTML строку. Jsoup предоставляет несколько перегруженных методов parse() для чтения HTML из строки, файла, из базового URI, из URL и из InputStream. Вы также можете указать кодировку, для корректного чтения HTML файла.
Получение данных.
Для получения данных используется сторонняя Java-библиотека jsoup. Кроме того, необходимо предоставить приложению доступ в Интернет. Для этого в файл AndroidManifest.xml нужно дописать следующую строку:
<uses-permission android:name="android.permission.INTERNET"/>
В самом классе Parser надо прописать импорт следующих классов:
import java.util.List;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.nodes.Node;
import org.jsoup.parser.CharacterReader;
import org.jsoup.parser.HtmlTreeBuilder;
import org.jsoup.parser.ParseError;
import org.jsoup.parser.ParseErrorList;
import org.jsoup.parser.ParseSettings;
import org.jsoup.parser.Tokeniser;
import org.jsoup.parser.TreeBuilder;
import org.jsoup.parser.XmlTreeBuilder;
Информация о расписании университета берется с сайта «bsu.ru», и для начала работы необходимо подключитьсяк нужной странице и получить объект класса Document: получаем данные методом GET
org.jsoup.nodes.Document doc = Jsoup.connect("http://bsu.ru/rasp/?g="+groupeNum).get();
После подключения нужно извлечь требуемую информацию:
Elements elements = doc.select("div.week");/**разбиваем по неделям**/
Метод select() позволяет получить нужные теги.
Далее в цикле для каждого элемента списка извлекается нужная информация:
for (Element element : elements) {
Elements el = element.select("table.rasp_week");
for (Element element1 : el) {
Elements elements1 = element1.select("td");
for (Element element2 : elements1) {
Elements day = element2.select("h3.rasp_day");/*получаем день**/
for (Element element3 : day) {d = element3.text();}
Elements time = element2.select("td.rasp_time");/**время**/
for (Element element3 : time) {t = element3.text();}
Elements subj = element2.select("td.rasp_subj");/**предмет**/
for (Element element3 : subj) {s = element3.text();}
Elements type = element2.select("td.rasp_subj_type"); /**тип**/
for (Element element3 : type) {st = element3.text();}
Elements aud = element2.select("td.rasp_aud");/**номер аудит**/
for (Element element3 : aud) {a = element3.text();}
Elements week = el.select("table.rasp_week").prev();/*№ недели*/
for (Element element3 : week) {w = element3.text();}
Elements name = element2.select("td.rasp_aud").next(); /**следующий элемент после номера аудитории - имя преподователя**/
for (Element element3 : name) {n = element3.text();
/**если день недели совподает то вывести то формируем список**/
if (dayOfWeek.equals(d)) {scheduler = w + "\r\n" +
"Время: " + t + "\r\n" + "Название предмета: " + s + "\r\n" + "Тип пары: " + st +
" Аудитория: " + a + "\r\n" + "Имя преподавателя: " + n + "\r\n\r";
my.add(scheduler); /**добавляем строку в список строк **/
Document object model (объектная модель документа).
Когда вы открываете веб-страницу в браузере, он получает исходный текст HTML и разбирает (парсит) его. Браузер строит модель структуры документа и использует её, чтобы нарисовать страницу на экране. Вы можете читать её и изменять. Она изменяется в реальном времени – как только вы её подправляете, страница на экране обновляется, отражая изменения.
Структура документа
Можно представить HTML как набор вложенных коробок. Теги включают в себя теги, которые в свою очередь включают теги, или текст. 
Структура данных, использующаяся браузером для представления документа, отражает его форму. Для каждой коробки есть объект, с которым мы можем взаимодействовать и узнавать про него разные данные – какой тег он представляет, какие коробки и текст содержит. Это представление называется Document Object Model (объектная модель документа), или сокращённо DOM. Мы можем получить доступ к этим объектам через глобальную переменную document. Её свойство documentElement ссылается на объект, представляющий тег . Он также предоставляет свойства head и body, в которых содержатся объекты для соответствующих элементов.
Деревья
Каждый узел может ссылаться на другие узлы, у каждого из ответвлений может быть своё ответвление. Эта структура – типичный пример вложенных структур, где элементы содержат подэлементы, похожие на них самих.
У типичного дерева есть разные узлы. Называется структура данных деревом, когда она разветвляется, не имеет циклов (узел не может содержать сам себя), и имеет единственный ярко выраженный «корень». В случае DOM в качестве корня выступает document.documentElement.
У каждого узлового объекта DOM есть свойство nodeType, содержащее цифровой код, определяющий тип узла. У обычных элементов он равен 1, что также определено в виде свойства-константы document.ELEMENT_NODE. У текстовых узлов, представляющих отрывки текста, он равен 3 (document.TEXT_NODE). У комментариев - 8 (document.COMMENT_NODE). Узлы DOM содержат много ссылок на соседние.
Согласно DOM-модели, документ является иерархией. Каждый HTML-тег образует отдельный элемент-узел, каждый фрагмент текста - текстовый элемент, и т.п.
Проще говоря, DOM - это представление документа в виде дерева тегов. Это дерево образуется за счет вложенной структуры тегов плюс текстовые фрагменты страницы, каждый из которых образует отдельный узел.
Самый внешний тег - <html>, поэтому дерево начинает расти от него. Внутри <html> находятся два узла: <head> и <body> - они становятся дочерними узлами для <html>
Теги образуют узлы-элементы (element node). Текст представлен текстовыми узлами (text node). И то и другое - равноправные узлы дерева DOM.
Корневым элементом иерархии является html. У него есть два потомка. Первый - head, второй - body. Дерево образуется за счет элементов-узлов - тегов HTML.
HTML
Язык разметки гипертекста HTML (Hyper Text Markup Language) является основой Всемирной паутины. Именно он является основой создания веб-страниц. С помощью HTML осуществляется логическое форматирование документа, и только для этих целей он и может использоваться.
Структура HTML-документа
HTML-документы строятся на основе тегов, которые структурируют документ. Обычно теги бывают парными, т. е. состоят из открывающего и закрывающего тега, хотя бывают и исключения. Имена открывающих тегов заключаются в угловые скобки < … >, а закрывающих помимо этого еще и предваряются знаком слеш </ … >.
HTML-документ обрамляется парными тегами <html> … </html>. Кроме того, для обеспечения корректного отображения документа современный стандарт требует использования одиночного тега <!DOCTYPE>, имеющего следующую структуру:
<!DOCTYPE HTML PUBLIC>
HTML-документы состоят из заголовка и тела документа. Заголовок и тело документа представляются парными тегами <head> … </head> и <body> … </body>, соответственно. Таким образом, каркас HTML-документа будет иметь следующую структуру:
<!DOCTYPE HTML PUBLIC>
<html>
<head>
СОДЕРЖАНИЕ ЗАГОЛОВКА
</head>
<body>
СОДЕРЖАНИЕ ТЕЛА ДОКУМЕНТА
</body>
</html>
Заголовок включает в себя несколько специализированных тегов, основными из которых являются <title> … </title> и <meta> … </meta>
Тег <title> содержит заголовок документа, который будет выводится в заголовочной части окна браузера. Тег <meta> содержит специальную информацию, такую как тип кодировки:
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
а так же список ключевых слов и информацию о содержании сайта:
<meta name="keywords" content="список ключевых слов">
Первое необходимо для корректной поддержки кодировки, а второе позволяет поисковым машинам производить корректное индексирование страниц (следует заметить, что современные поисковые системы обычно игнорируют ключевые слова, но это не отменяет необходимости использования этого атрибута).
В рассмотренных тегах name="keywords" и content="список ключевых слов" являются атрибутами тегов, которые конкретизируют их. Например, атрибуты могут указывать, что текст, заключенный в данном теге, при отображении должен выравниваться по центру. Атрибуты записываются сразу после имени тега, причем значения атрибутов заключаются в кавычки. Атрибутов у тега может быть несколько, но могут и вовсе отсутствовать.
Таблицы
Таблицы являются одной из основных структур, используемых для структурирования информации в HTML-документах. Кроме того, таблицы часто используются для организации структуры страницы, и хотя сейчас такое использование таблиц признано устаревшем и не рекомендуемым, оно до сих пор применяется многими веб-дизайнерами.
Структура и представление HTML  документа
Если загрузить HTML документ в веб-браузер, то можно будет увидеть древовидную структуру этого документа:

Представление HTML-документа в виде древовидной структуры

Jsoup позволяет быстро и эффективно извлекать элементы из DOM – структуры, использую селекторы CSS.
Под содержимым понимается все, что может находиться на веб-странице: рисунки, ссылки, абзацы, текст и т. д. Это обеспечивает унифицированный способ навигации по документу.
Следует заметить, что DOM может применяться не только в веб-страницах, но и к любым других документам. В частности, она может использоваться с любыми словарями XML, причем одним из таких словарей является HTML, а точнее, XHTML.
DOM является развивающимся стандартом и разбит на три уровня. Первый уровень является первой версией стандарта и пока что единственной законченной. Он состоит из двух разделов: первый является ядром и определяет принципы манипуляции со структурой документа (генерация и навигация), а второй посвящен представлению в DOM элементов HTML, определяемых одноименными тегами.
Второй и третий уровни описывают модель событий, дополняют таблицы стилей, проходы по структуре.

Приложенные файлы

  • docx 18241710
    Размер файла: 604 kB Загрузок: 0

Добавить комментарий