10. Ekler
Bu belgede kullanılan araçların Windows 7 ile 10 arasında çalışan bilgisayarlara nasıl kurulacağını burada anlatıyoruz. Okuyucu, kendi ortamına göre gerekli ayarlamaları yapmalıdır.
10.1. JDK Kurulumu
URL'te (Nisan 2016), en güncel [http://www.oracle.com/technetwork/java/javase/downloads/index.html] ve JDK bulunabilir. Bundan sonra, JDK'in kurulum klasörüne <jdk-install> adı verilecektir.
![]() |
10.2. SDK Android Yöneticisi'nin kurulumu
![]() |
- [1]'te, neden Android için SDK'e ihtiyaç duyulur;
Android SDK Yöneticisi, [https://developer.android.com/studio/index.html#downloads] adresinde bulunabilir (Mayıs 2016).
![]() |
SDK Manager'ı kurun. Kurulum dizinini bundan sonra <sdk-manager-install> olarak not edeceğiz. Programı başlatın.
Proje şu şekilde yapılandırılmıştır (bkz. paragraf 9.3.2):
- SDK API 23 [2];
- SDK Build-tools 23.0.3 [3];
- SDK Tool 25.1.3 [4]
Bu öğeleri indirdiğinizden emin olun.
10.3. Genymotion emülatör yöneticisinin kurulumu
Android'in SDK sürümüyle birlikte gelen emülatörler yavaştır ve bu da onları kullanmayı caydırıcı hale getirir. [Genymotion] şirketi, yüksek performanslı bir emülatör sunmaktadır. Bu emülatör, URL [https://cloud.genymotion.com/page/launchpad/download/] (Mayıs 2016) sürümünde mevcuttur.
Kişisel kullanım sürümünü edinmek için kayıt olmanız gerekecektir. VirtualBox sanal makinesi ile birlikte [Genymotion] ürününü indirin:

Bundan sonra [Genymotion] kurulum klasörüne <genymotion-install> adını vereceğiz. [Genymotion] dosyasını çalıştırın. Ardından bir tablet görüntüsünü indirin:
![]() |
- [1]'te, [2]'te açıklanan sanal terminali ekleyin;
10.4. IDE IntellijIDEA Community Edition'ın kurulumu
IDE [ Intellij IDEA Community Edition], URL [https://www.jetbrains.com/idea/#chooseYourEdition]'te mevcuttur:
![]() |
IDE'i kurun ve çalıştırın.
![]() | ![]() |
- [1-2]'te eklentileri yapılandırın;
- [3-4]'te, IDE'e [Genymotion] eklentisini ekleyin;
![]() |
- [6-7]'te, IDE'i yapılandırın;
![]() | ![]() |
- [8-9] olarak değiştirin, [Genymotion] emülatör yöneticisinin kurulum klasörünü belirtin;
![]() |
- [12-13]'te, projelerin varsayılan türleri yapılandırılır;
![]() | ![]() |
![]() |
- [14-16]'te, JDK yapılandırılır;
![]() |
![]() | ![]() |
- [17-20]'e, Android'in SDK'i yapılandırılır;
![]() |
- [21-22]'te, projeler için varsayılan olarak JDK belirtilir;
![]() | ![]() |
![]() |
- [23-27]'te, varsayılan olarak İngilizce dilinde etkin olan yazım denetimi devre dışı bırakılır;
![]() | ![]() |
- [28-32]'te, istediğiniz klavye kısayolu türünü seçin. Intellij'in varsayılan ayarını koruyabilir veya daha alışkın olduğunuz başka bir IDE'teki ayarı seçebilirsiniz;
![]() |
- [33-35]'te, IDE'i birden fazla projeye göre yapılandırın. Aynı pencerede veya farklı pencerelerde birden fazla projeyi yönetebilir;
![]() |
- [36-37]'te, varsayılan olarak satırları numaralandırın. Bu, bir istisna oluşturan satırı hızlı bir şekilde bulmanızı sağlar;
10.5. Örneklerin kullanımı
Örnek projeler IntellijIDEA, |ICI| adresinde mevcuttur. 1.3 numaralı paragrafta bunların nasıl açılacağı açıklanmaktadır.
10.6. Java'da jSON yönetimi
Geliştiriciye şeffaf bir şekilde, [Spring MVC] çerçeve, JSON [Jackson] kütüphanesini kullanır. JSON (JavaScript Nesne Notasyonu) ne olduğunu açıklamak için, burada nesneleri JSON formatında serileştiren ve bunun tersini yaparak üretilen JSON dizelerini deserileştirip başlangıçtaki nesneleri yeniden oluşturan bir program sunuyoruz.
'Jackson' kütüphanesi, bir nesnenin
- bir nesnenin JSON dizesini: new ObjectMapper().writeValueAsString(object);
- bir JSON dizesinden bir nesne oluşturmak: new ObjectMapper().readValue(jsonString, Object.class).
Her iki yöntem de bir IOException'i başlatabilir. İşte bir örnek.
![]() |
Yukarıdaki proje, aşağıdaki [pom.xml] dosyasını içeren bir Maven projesidir;
<?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. satırlar: 'Jackson' kütüphanesini yükleyen bağımlılık;
[Personne] sınıfı şu şekildedir:
package istia.st.json;
public class Personne {
// veriler
private String nom;
private String prenom;
private int age;
// oluşturucular
public Personne() {
}
public Personne(String nom, String prénom, int âge) {
this.nom = nom;
this.prenom = prénom;
this.age = âge;
}
// imza
public String toString() {
return String.format("Personne[%s, %s, %d]", nom, prenom, age);
}
// alıcı ve ayarlayıcılar
...
}
[Main] sınıfı şöyledir:
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 {
// serileştirme / ters serileştirme aracı
static ObjectMapper mapper = new ObjectMapper();
public static void main(String[] args) throws IOException {
// kişi oluşturma
Personne paul = new Personne("Denis", "Paul", 40);
// JSON görüntüleme
String json = mapper.writeValueAsString(paul);
System.out.println("Json=" + json);
// JSON'dan Kişi nesnesi oluşturma
Personne p = mapper.readValue(json, Personne.class);
// Kişi görüntüleme
System.out.println("Personne=" + p);
// bir dizi
Personne virginie = new Personne("Radot", "Virginie", 20);
Personne[] personnes = new Personne[]{paul, virginie};
// JSON görüntüleme
json = mapper.writeValueAsString(personnes);
System.out.println("Json personnes=" + json);
// sözlük
Map<String, Personne> hpersonnes = new HashMap<String, Personne>();
hpersonnes.put("1", paul);
hpersonnes.put("2", virginie);
// JSON'un görüntülenmesi
json = mapper.writeValueAsString(hpersonnes);
System.out.println("Json hpersonnes=" + json);
}
}
Bu sınıfın çalıştırılması sonucunda ekranda şunlar görüntülenir:
Örnekten çıkarılacak sonuçlar:
- JSON / Object dönüşümleri için gerekli olan [ObjectMapper] nesnesi: 11. satır;
- [Personne] --> JSON dönüşümü: 17. satır;
- JSON --> [Personne] dönüşümü: 20. satır;
- her iki yöntem tarafından tetiklenen [IOException] istisnası: satır 13.
İçindekiler
1 Giriş 5
1.2Les Kullanılan araçlar 6
1.3Les örnek kodları 6
2Giriş örneği 9
2.1L örnek uygulama mimarisi 9
2.2L'yürütülebilir dosyası 9
2.3L'senkron arayüz 11
2.4L'senkron çağrı 12
2.5Tests senkron çağrılar 13
2.6L'in asenkron arayüzü ve uygulaması 14
2.7L'asenkron çağrı 16
2.8Tests'de asenkron çağrılar 19
2.8.1avec zamanlayıcı [Schedulers.io] 20
2.8.2avec zamanlayıcı [Schedulers.computation] 20
2.8.3avec zamanlayıcı [Schedulers.newThread] 21
2.8.4avec zamanlayıcılar [Schedulers.trampoline, Schedulers.immediate] 22
2.9Cas sınırlar 22
3Genel sınıf ve yöntem imzaları 27
4Java 8'deki lambda işlevleri 32
4.1Exemple-01 - İşlevsel arayüzler ve lambda işlevleri 32
4.2Exemple-02 - Predicate<T> işlevsel arayüzü 34
4.3Exemple-03 - Function<T,R> işlevsel arayüzü 37
4.4Exemple-04 - Consumer<T> işlevsel arayüzü 38
4.5Exemple-05 - BiConsumer<T,U> işlevsel arayüzü 40
4.6Exemple-06 - BiFunction<T,U,R> işlevsel arayüzü 41
4.7Exemple-07 - Supplier<T> işlevsel arayüzü 43
5Java 8’deki Stream<T> türü 45
5.1Exemple-01 - Stream sınıfı 45
5.2Exemple-02 - Bir Stream'deki öğelerin paralel işlenmesi 47
5.3Exemple-03 - Bir Stream'in öğelerinin paralel işlenmesi 48
5.4Exemple-04 - Bir akışı filtreleme 50
5.5Exemple-05 - Bir Stream<T1>'den bir Stream<T2> oluşturma 52
5.6Exemple-06 - Stream<T> sınıfının diğer yöntemleri 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 asal sayı akış yöntemleri 71
6RxJava kütüphanesinin işlevsel arayüzleri 72
6.1Exemple-01: [Action0] işlevsel arayüzü 72
6.2Exemple-02, 03: [Actioni] işlevsel arayüzü 73
6.3Exemple-04, 05: [Funci] işlevsel arayüzü 74
7RxJava kütüphanesi 77
7.1 Gözlemlenebilirler oluşturma ve bunlara abone olma 77
7.1.1Exemple-01: [Observable.from] yöntemi 77
7.1.2Exemple-03: Observer sınıfı 82
7.1.3Exemple-04: [Observable.create] yöntemi 84
7.1.4Exemple-05: [Exemple-04]'in yeniden yapılandırılması 86
7.2Thread: Yürütme, gözlem iş parçacığı 88
7.2.1Exemple-06: [main] dışındaki bir iş parçacığında gözlemlenebilir ve gözlemci 88
7.2.2Exemple-07: iki farklı iş parçacığında gözlemlenebilir ve gözlemci 90
7.3Observables ön tanımlı 92
7.3.1Exemple-08: [Observable.range] yöntemi 92
7.3.2Exemple-09: Observable.[interval, take, doNext] yöntemleri 96
7.3.3Exemples-10/12: Observable.[error, empty, never] yöntemleri 98
7.4.1Exemple-13: eylem iş parçacığı, gözlem iş parçacığı 103
7.5Combinaisons, birden fazla gözlemlenebilir değişken 106
7.5.1Exemple-14: [Observable.merge] ile iki gözlemleneni birleştirme 106
7.5.2Exemple-15: iki gözlemleneni [Observable.concat] ile birleştirme 108
7.5.3Exemple-16: iki gözlemleneni [Observable.zip] ile birleştirmek 109
7.5.4Exemple-17: iki gözlemleneni [Observable.combineLatest] ile birleştirmek 111
7.5.5Exemple-18: iki gözlemleneni [Observable.amb] ile birleştirmek 113
7.6 Bir gözlemlenebilirin işleme zinciri 114
7.6.1Exemple-19: Bir gözlemleneni [Observable.map] ile dönüştürme 114
7.6.2Exemple-20: [Observable.filter] ile bir gözlemleneni filtreleme 116
7.6.3Exemple-21: [Observable.flapMap] ile bir gözlemlenebiliri dönüştürme 117
7.6.4Exemples-22: [Observable] sınıfının diğer yöntemleri 123
7.7Les zamanlayıcılar 127
7.7.1Exemple-23: [Schedulers.computation] zamanlayıcısı 127
7.7.2Exemple-24: [Schedulers.io] zamanlayıcı 128
7.7.3Exemple-25: [Schedulers.newThread] zamanlayıcısı 129
7.7.4Exemple-26: [Schedulers.immediate, Schedulers.trampoline] zamanlayıcıları 130
7.8Conclusion 133
Swing ortamında 8RxJava 134
8.1Introduction 134
8.2La kod yapısı 135
8.3 Projenin Yürütülmesi 136
8.4Le senkron hizmet 136
8.5Le asenkron hizmet 139
8.6L 'grafik kullanıcı arayüzü' 141
8.7Instanciation grafik kullanıcı arayüzü 143
8.8 Senkron isteklerin yürütülmesi 144
8.9 Asenkron isteklerin yürütülmesi 145
Android ortamında 9RxJava 149
9.1Introduction 149
9.2Le web hizmeti / jSON 149
9.2.1Le IntelliJ IDEA projesi 150
9.2.2Les projenin Gradle bağımlılıkları 151
9.2.3La katmanı [métier] 153
9.2.4Le web hizmeti / JSON 156
9.2.5Configuration Spring projesi 160
9.2.6 Web sunucusunun çalıştırılması 161
9.3Le Android istemcisi 161
9.3.1RxAndroid 161
9.3.2Le IntelliJ IDEA projesi 162
9.3.3 IntelliJ Idea projesinin çalıştırılması 164
9.3.4Les projenin Gradle bağımlılıkları 166
9.3.5Le Android uygulama manifest dosyası 167
9.3.6La katmanı [DAO] 168
9.3.6.1L katmanının [IDao] arayüzü ([DAO] katmanından) 168
9.3.6.2 [DAO] katmanının uygulaması 170
9.3.7Les uygulama görünümleri 172
9.3.7.1La sınıfı [MyFragment] 174
9.3.7.2Le sorgunun [RequestFragment] parçası 176
9.3.7.3Le yanıtın [ResponseFragment] parçası 177
9.3.7.4L Android etkinliği [MainActivity] 178
9.3.7.5Le parçası [RequestFragment] 185
9.3.7.6Le parçası [ResponseFragment] 187
9.3.8Les gözlemlenebilir örnekler 190
9.3.8.6Pour devam et 202
9.3.9Conclusion 202
10Ekler 203
10.1Installation'in JDK'ten 203
10.2Installation (SDK Android Yöneticisi) 203
Genymotion Emülatör Yöneticisi'nden 10.3Installation 204
10.4Installation, IDE ve IntellijIDEA Community Edition'dan 205
Örneklerden 10.5Utilisation 210
10.6Gestion, jSON'in Java sürümü 211

























