В предыдущих статьях [1, 2] из этой серии было описано проектирование и создание внешнего вида интерфейса. Результат изображен на следующих скриншотах экрана (рисунок 1).

Следующая стадия разработки — это получение контента каждой страницы приложения от сервера и обработка нажатия кнопок. Она включает в себя следующие этапы:
1. Разработка серверной части приложения (создание модуля обработки запросов на сервере):
- Написание функции получения информации о конкретном фильме;
- Написание функции получения информации о конкретном кинотеатре;
- Написание функции получения списка всех кинотеатров;
- Написание функции получения списка всех фильмов;
- Написание функции получения списка расписания одного кинотеатра;
- Написание функции получения списка расписания одного фильма.
2. Разработка пользовательской части приложения:
- Создание браузерного клиента для получения контента с сервера;
- Создание меню приложения;
- Обработка события нажатия кнопки назад.
Получаем схему работы нашего приложения:
- Делается запрос на сервер;
- Сервер обрабатывает запрос и формирует соответствующий контент;
- Сервер посылает сгенерированный контент приложению;
- Приложение воспроизводит контент.
Самая простая и эффективная реализация предложенной схемы — это организация работы приложения, как браузера, который будет обмениваться информацией с сервером, загружать и показывать нужные страницы. Сервер будет отдавать контент в виде полноценной html-страницы со ссылками на другие страницы.
Перейдем к написанию кода приложения. Открываем файл main.java. В этом файле требуется описать событие создания основного класса. Фрагмент кода показан ниже.
private WebView wv;
private String LASTURL = "";
Menu myMenu = null;
private static final String PREFS_NAME = "MyPrefs";
private Boolean imgOn;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.getWindow().requestFeature(Window.FEATURE_PROGRESS);
setContentView(R.layout.activity_main);
wv = (WebView) findViewById(R.id.wv);
WebSettings webSettings = wv.getSettings();
webSettings.setSavePassword(true);
webSettings.setSaveFormData(true);
webSettings.setJavaScriptEnabled(true);
wv.loadUrl("http://thinkit.ru/kino-v-taganroge/mobile/main-cinema/");
На данном этапе при загрузке приложение будет обращаться к указанному нами адресу. Далее требуется настроить веб клиент. Дописываем следующий код в onCreate
SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
final Activity activity = this;
wv.setWebChromeClient(new WebChromeClient() {
public void onProgressChanged(WebView view, int progress)
{
activity.setTitle(" "+LASTURL);
activity.setProgress(progress * 100);
if(progress == 100)
activity.setTitle(" "+LASTURL);
}
});
wv.setWebViewClient(new WebViewClient() {
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl)
{
Toast.makeText(getApplicationContext(), "Error: " + description+ " " + failingUrl, Toast.LENGTH_LONG).show();
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url)
{
if (url.indexOf("thinkit")<=0) {
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(intent);
return true;
}
return false;
}
public void onPageStarted (WebView view, String url, Bitmap favicon) {
LASTURL = url;
view.getSettings().setLoadsImagesAutomatically(true);
}
});
Теперь при загрузке приложения будет открываться главный интерфейс с сервера (страница кинотеатров). При переходе по ссылке предыдущее значение ссылки запоминается. Далее опишем событие нажатия кнопки назад.
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK) && wv.canGoBack()) {
wv.goBack();
return true;
}
return super.onKeyDown(keyCode, event);
}
Создаем меню приложения.
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
super.onCreateOptionsMenu(menu);
this.myMenu = menu;
MenuItem item = menu.add(0, 1, 0, "Фильмы");
MenuItem item1 = menu.add(0, 2, 0, "Кинотеатры");
MenuItem item2 = menu.add(0, 3, 0, "Назад");
return true;
}
Как видно меню имеет три пункта: «Фильмы», «Кинотеатры», кнопка «Назад». После выполнения данного кода в меню появится три вышеописанных элемента. Требуется описать их действие, что делается в следующем фрагменте кода.
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId())
{
case 1:
wv.loadUrl("http://thinkit.ru/kino-v-taganroge/mobile/main-film/");
break;
case 3:
if (wv.canGoBack()) {
wv.goBack();
}
break;
case 2:
wv.loadUrl("http://thinkit.ru/kino-v-taganroge/mobile/main-cinema/");
break;
}
return true;
}
Клиентская часть приложения написана. Код работы сервера написан на php. Так как целью данной статьи является создание приложения для android, то код серверной части приведен не будет.
Сделаем выводы. Поставленные задачи выполнены: приложение имеет все запланированные интерфейсы и легко управляется с помощью ссылок, выступая в роли браузера. Пользователь может получить доступ к предыдущей странице как с помощью кнопки назад, так и используя ссылку на странице. Существует небольшое меню для того, чтобы сделать навигацию еще более простой. Каждый интерфейс дает исчерпывающую информацию на свою тему.
Данная реализация хороша тем, что приложение не сильно задействует ресурсы телефона или планшета. Адаптивная верстка страниц выглядит одинаково на устройствах с разным разрешением экрана.
Минусы текущей реализации заключаются в том, что без доступа в интернет пользователь не сможет пользоваться приложением. Так же уже загруженные страницы при повторном заходе на них обновляются. Данная проблема решается кешированием страниц, что будет реализовано в дальнейшей модификации проекта.