10. Додатки
Тут ми розповімо, як встановити інструменти, що використовуються в цьому документі, на комп’ютерах із Windows 7–10. Читач зможе адаптувати ці вказівки до свого середовища.
10.1. Встановлення JDK
На сайті URL можна знайти [http://www.oracle.com/technetwork/java/javase/downloads/index.html] (квітень 2016 р.) — найновішу версію JDK. Надалі папку з інсталяцією JDK будемо називати <jdk-install>.
![]() |
10.2. Встановлення SDK Android Manager
![]() |
- у [1], навіщо потрібен SDK для Android;
Менеджер Android SDK можна знайти за адресою [https://developer.android.com/studio/index.html#downloads] (травень 2016 р.).
![]() |
Встановіть SDK Manager. Далі ми будемо позначати його каталог установки як <sdk-manager-install>. Запустіть програму.
Проєкт було налаштовано для (див. розділ 9.3.2):
- SDK API 23 [2];
- SDK Build-tools 23.0.3 [3];
- SDK Tool 25.1.3 [4]
Переконайтеся, що ви завантажили ці компоненти.
10.3. Встановлення менеджера емуляторів Genymotion
Емулятори, що постачаються разом із SDK для Android, працюють повільно, що відбиває бажання ними користуватися. Компанія [Genymotion] пропонує потужний емулятор. Він доступний у URL [https://cloud.genymotion.com/page/launchpad/download/] (травень 2016 р.).
Щоб отримати версію для особистого користування, вам потрібно зареєструватися. Завантажте продукт [Genymotion] разом із віртуальною машиною VirtualBox:

Надалі папку з інсталяційними файлами [Genymotion] ми будемо називати <genymotion-install>. Запустіть [Genymotion]. Потім завантажте образ для планшета:
![]() |
- у [1], додайте віртуальний термінал, описаний у [2];
10.4. Встановлення IDE IntellijIDEA Community Edition
IDE [ Intellij IDEA Community Edition] доступний у URL [https://www.jetbrains.com/idea/#chooseYourEdition]:
![]() |
Встановіть IDE, а потім запустіть його.
![]() | ![]() |
- у [1-2] налаштуйте плагіни;
- у [3-4] додайте до IDE плагін [Genymotion];
![]() |
- у [6-7] налаштуйте IDE;
![]() | ![]() |
- на [8-9], вкажіть папку встановлення менеджера емуляторів [Genymotion];
![]() |
- у [12-13] налаштовується тип проектів за замовчуванням;
![]() | ![]() |
![]() |
- у файлі [14-16] налаштовується JDK;
![]() |
![]() | ![]() |
- у [17-20] налаштовується SDK для Android;
![]() |
- у [21-22] вказується JDK як значення за замовчуванням для проектів;
![]() | ![]() |
![]() |
- у [23-27] вимикається перевірка орфографії, яка за замовчуванням налаштована для англійської мови;
![]() | ![]() |
- у [28-32] виберіть бажаний тип комбінацій клавіш. Ви можете залишити стандартні налаштування IntelliJ або вибрати інші, до яких ви більше звикли, у IDE;
![]() |
- у [33-35] налаштуйте IDE для роботи з кількома проєктами. Він може керувати кількома проєктами в одному вікні або в різних вікнах;
![]() |
- у [36-37] за замовчуванням пронумеруйте рядки. Це дозволить швидко знайти рядок, який спричинив виняток;
10.5. Використання прикладів
Приклади проектів IntellijIDEA доступні |ICI|. У розділі 1.3 пояснюється, як їх відкрити.
10.6. Управління jSON у Java
Фреймворк [Spring MVC] використовує бібліотеку JSON [Jackson], що відбувається прозоро для розробника. Щоб проілюструвати, що таке JSON (JavaScript Object Notation), ми наводимо тут програму, яка серіалізує об’єкти у формат JSON та виконує зворотну операцію, десеріалізуючи отримані рядки JSON для відтворення вихідних об’єктів.
Бібліотека «Jackson» дозволяє побудувати:
- рядок JSON для об’єкта: new ObjectMapper().writeValueAsString(object);
- об’єкт із рядка JSON: new ObjectMapper().readValue(jsonString, Object.class).
Обидва методи можуть викликати IOException. Ось приклад.
![]() |
Вищезазначений проєкт — це проєкт Maven із таким файлом: [pom.xml];
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>istia.st</groupId>
<artifactId>json</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.3.3</version>
</dependency>
</dependencies>
</project>
- рядки 12–16: залежність, яка завантажує бібліотеку «Jackson»;
Клас [Personne] має такий вигляд:
package istia.st.json;
public class Personne {
// дані
private String nom;
private String prenom;
private int age;
// конструктори
public Personne() {
}
public Personne(String nom, String prénom, int âge) {
this.nom = nom;
this.prenom = prénom;
this.age = âge;
}
// сигнатура
public String toString() {
return String.format("Personne[%s, %s, %d]", nom, prenom, age);
}
// гетери та сеттери
...
}
Клас [Main] має такий вигляд:
package istia.st.json;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
public class Main {
// інструмент серіалізації/десеріалізації
static ObjectMapper mapper = new ObjectMapper();
public static void main(String[] args) throws IOException {
// створення особи
Personne paul = new Personne("Denis", "Paul", 40);
// відображення JSON
String json = mapper.writeValueAsString(paul);
System.out.println("Json=" + json);
// інстанціювання об’єкта «Особа» на основі JSON
Personne p = mapper.readValue(json, Personne.class);
// відображення об’єкта «Personne»
System.out.println("Personne=" + p);
// масив
Personne virginie = new Personne("Radot", "Virginie", 20);
Personne[] personnes = new Personne[]{paul, virginie};
// відображення JSON
json = mapper.writeValueAsString(personnes);
System.out.println("Json personnes=" + json);
// словник
Map<String, Personne> hpersonnes = new HashMap<String, Personne>();
hpersonnes.put("1", paul);
hpersonnes.put("2", virginie);
// виведення JSON
json = mapper.writeValueAsString(hpersonnes);
System.out.println("Json hpersonnes=" + json);
}
}
Виконання цього класу призводить до виведення на екран наступного:
З цього прикладу слід звернути увагу на:
- об’єкт [ObjectMapper], необхідний для перетворень JSON / Object: рядок 11;
- перетворення [Personne] --> JSON: рядок 17;
- перетворення JSON --> [Personne]: рядок 20;
- виняток [IOException], викликаний обома методами: рядок 13.
Зміст
1 Вступ 5
1.2Les Використані інструменти 6
1.3Les коди прикладів 6
2Приклад вступу 9
2.1L — архітектура прикладу додатка 9
2.2L «Виконуваний файл» 9
2.3L «синхронний інтерфейс» 11
2.4L «синхронний виклик» 12
2.5Tests — синхронні виклики 13
2.6L «асинхронний інтерфейс та його реалізація» 14
2.7L «асинхронний виклик» 16
2.8Tests асинхронні виклики 19
2.8.1avec планувальник [Schedulers.io] 20
2.8.2avec планувальник [Schedulers.computation] 20
2.8.3avec планувальник [Schedulers.newThread] 21
2.8.4avec планувальники [Schedulers.trampoline, Schedulers.immediate] 22
2.9Cas обмеження 22
3Підписи узагальнених класів та методів 27
4Лямбда-функції в Java 8 32
4.1Exemple-01 — Функціональні інтерфейси та лямбда-вирази 32
4.2Exemple-02 — функціональний інтерфейс Predicate<T> 34
4.3Exemple-03 — функціональний інтерфейс Function<T,R> 37
4.4Exemple-04 — функціональний інтерфейс Consumer<T> 38
4.5Exemple-05 — функціональний інтерфейс BiConsumer<T,U> 40
4.6Exemple-06 — функціональний інтерфейс BiFunction<T,U,R> 41
4.7Exemple-07 — функціональний інтерфейс Supplier<T> 43
5Тип Stream<T> у Java 8 45
5.1Exemple-01 — клас Stream 45
5.2Exemple-02 — паралельна обробка елементів потоку (Stream) 47
5.3Exemple-03 — паралельна обробка елементів потоку 48
5.4Exemple-04 — фільтрування потоку 50
5.5Exemple-05 — створення потоку <T2> на основі потоку <T1> 52
5.6Exemple-06 — інші методи класу Stream<T> 53
5.6.1[findFirst] 54
5.6.2[findAny] 55
5.6.3[skip] 56
5.6.4[limit] 58
5.6.5[count] 59
5.6.6[max, min] 60
5.6.7[reduce] 63
5.6.8[sorted] 63
5.6.9[anyMatch, noneMatch, allMatch] 65
5.6.10[collect(Collectors.groupingBy)] 65
5.6.11[distinct] 67
5.6.12[flatMap] 68
5.6.13 Методи потоків простих чисел 71
6Функціональні інтерфейси бібліотеки RxJava 72
6.1Exemple-01: функціональний інтерфейс [Action0] 72
6.2Exemple-02, 03: функціональний інтерфейс [Actioni] 73
6.3Exemple-04, 05: функціональний інтерфейс [Funci] 74
7Бібліотека RxJava 77
7.1 Створення спостережуваних величин та підписка на них 77
7.1.1Exemple-01: метод [Observable.from] 77
7.1.2Exemple-03: клас Observer 82
7.1.3Exemple-04: метод [Observable.create] 84
7.1.4Exemple-05: рефакторинг [Exemple-04] 86
7.2Thread виконання, спостережний потік 88
7.2.1Exemple-06: об’єкт спостереження та спостерігач у потоці, відмінному від [main] 88
7.2.2Exemple-07: об’єкт спостереження та спостерігач у двох різних потоках 90
7.3Observables, що визначені заздалегідь 92
7.3.1Exemple-08: метод [Observable.range] 92
7.3.2Exemple-09: методи Observable.[interval, take, doNext] 96
7.3.3Exemples-10/12: методи Observable.[error, empty, never] 98
7.4.1Exemple-13: потік дії, потік спостереження 103
7.5Combinaisons з кількома спостережуваними величинами 106
7.5.1Exemple-14: об’єднати дві величини, що спостерігаються, з [Observable.merge] 106
7.5.2Exemple-15: об'єднати дві спостережувані величини з [Observable.concat] 108
7.5.3Exemple-16: об’єднати дві спостережувані величини з [Observable.zip] 109
7.5.4Exemple-17: об’єднати дві спостережувані величини з [Observable.combineLatest] 111
7.5.5Exemple-18: об’єднання двох спостережуваних величин із [Observable.amb] 113
7.6 Ланцюг обробки спостережуваної величини 114
7.6.1Exemple-19: перетворення об’єкта спостереження за допомогою [Observable.map] 114
7.6.2Exemple-20: фільтрування спостережуваної величини за допомогою [Observable.filter] 116
7.6.3Exemple-21: перетворення спостережуваного за допомогою [Observable.flapMap] 117
7.6.4Exemples-22: інші методи класу [Observable] 123
7.7Les: планувальники 127
7.7.1Exemple-23: планувальник [Schedulers.computation] 127
7.7.2Exemple-24: планувальник [Schedulers.io] 128
7.7.3Exemple-25: планувальник [Schedulers.newThread] 129
7.7.4Exemple-26: планувальники [Schedulers.immediate, Schedulers.trampoline] 130
7.8Conclusion 133
8RxJava у середовищі Swing 134
8.1Introduction 134
8.2La структура коду 135
8.3 Реалізація проєкту 136
8.4Le синхронний сервіс 136
8.5Le асинхронний сервіс 139
8.6L «графічний інтерфейс» 141
8.7Instanciation графічного інтерфейсу 143
8.8 Виконання синхронних запитів 144
8.9 Виконання асинхронних запитів 145
9 RxJava в середовищі Android 149
9.1Introduction 149
9.2Le веб-сервіс / jSON 149
9.2.1Le проєкт IntelliJ Idea 150
9.2.2Les залежності Gradle проекту 151
9.2.3La рівень [métier] 153
9.2.4Le веб-сервіс / JSON 156
9.2.5Configuration проекту Spring 160
9.2.6 Запуск веб-сервера 161
9.3Le клієнт для Android 161
9.3.1RxAndroid 161
9.3.2Le проект IntelliJ IDEA 162
9.3.3Виконання проєкту IntelliJ IDEA 164
9.3.4Les Залежності проекту Gradle 166
9.3.5Le маніфест додатка Android 167
9.3.6La рівень [DAO] 168
9.3.6.1L — інтерфейс [IDao] шару [DAO] 168
9.3.6.2 Реалізація шару [DAO] 170
9.3.7Les — види додатка 172
9.3.7.1La клас [MyFragment] 174
9.3.7.2Le фрагмент [RequestFragment] запиту 176
9.3.7.3Le фрагмент [ResponseFragment] з відповіді 177
9.3.7.4L — активність Android [MainActivity] 178
9.3.7.5Le фрагмент [RequestFragment] 185
9.3.7.6Le фрагмент [ResponseFragment] 187
9.3.8Les приклади спостережуваних величин 190
9.3.8.6Pour продовжувати 202
9.3.9Conclusion 202
10Додатки 203
10.1Installation замість JDK 203
10.2Installation з SDK Менеджер Android 203
10.3Installation з менеджера емуляторів Genymotion 204
10.4Installation з IDE IntellijIDEA Community Edition 205
10.5Utilisation із прикладів 210
10.6Gestion з jSON на Java 211

























