Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Goin' Mobile: Developing Apps for iOS and Andro...
Search
gailasgteach
February 27, 2018
Technology
0
970
Goin' Mobile: Developing Apps for iOS and Android with Java and JavaFX
Use a single code base, JavaFX UI, Gluon Framework, and your favorite IDE
gailasgteach
February 27, 2018
Tweet
Share
Other Decks in Technology
See All in Technology
GPUをつかってベクトル検索を扱う手法のお話し~NVIDIA cuVSとCAGRA~
fshuhe
0
330
新米エンジニアをTech Leadに任命する ー 成長を支える挑戦的な人と組織のマネジメント
naopr
1
340
30分でわかる!!『OCI で学ぶクラウドネイティブ実践 X 理論ガイド』
oracle4engineer
PRO
1
100
初海外がre:Inventだった人間の感じたこと
tommy0124
1
170
個人でデジタル庁の デザインシステムをVue.jsで 作っている話
nishiharatsubasa
3
5.3k
20251029_Cursor Meetup Tokyo #02_MK_「あなたのAI、私のシェル」 - プロンプトインジェクションによるエージェントのハイジャック
mk0721
PRO
6
2.3k
Kotlinで型安全にバイテンポラルデータを扱いたい! ReladomoラッパーをAIと実装してみた話
itohiro73
3
140
次世代のメールプロトコルの斜め読み
hirachan
2
230
可観測性は開発環境から、開発環境にもオブザーバビリティ導入のススメ
layerx
PRO
4
2.5k
AIの個性を理解し、指揮する
shoota
3
610
abema-trace-sampling-observability-cost-optimization
tetsuya28
0
420
短期間でRAGシステムを実現 お客様と歩んだ生成AI内製化への道のり
taka0709
0
120
Featured
See All Featured
Side Projects
sachag
455
43k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
650
Six Lessons from altMBA
skipperchong
29
4k
Git: the NoSQL Database
bkeepers
PRO
431
66k
Speed Design
sergeychernyshev
32
1.2k
Making Projects Easy
brettharned
120
6.4k
Building Applications with DynamoDB
mza
96
6.7k
Learning to Love Humans: Emotional Interface Design
aarron
274
41k
How to train your dragon (web standard)
notwaldorf
97
6.3k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
285
14k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
2
210
Fireside Chat
paigeccino
41
3.7k
Transcript
Atlanta February 23, 2018 Goin’ Mobile: Developing Apps for iOS
and Android with Java and JavaFX Paul Anderson Gail Anderson Anderson Software Group, Inc. asgteach.com 1 © 2018 Anderson Software Group
! Training Company ◦ Java, JavaFX Courses ! JavaFX Authors
◦ JavaFX Rich Client Programming on the NetBeans Platform ◦ Essential JavaFX ! LiveLesson Videos ◦ JavaFX Programming ◦ Java Reflection 2 © 2018 Anderson Software Group
! Why JavaFX on Mobile? ! Gluon Framework ! Gluon
Charm ! Gluon Connect and Gluon CloudLink ! Gluon Cloud Authentication ! Afterburner Framework ! Wrap Up, Q & A 3 © 2018 Anderson Software Group
! Critical Goal ◦ Platform independent source code ◦ “Write
Once, Install Everywhere” ! Design Approach ◦ Frameworks are a must ◦ Hide platform dependencies and messy details ! JavaFX Advantages ◦ Java UI, scene graph, nodes, FXML views ◦ Properties, listeners, binding, event handlers 4 © 2018 Anderson Software Group
5 © 2018 Anderson Software Group
! Development Tools ◦ Scene Builder for layouts, CSS and
skins ◦ Gradle for builds, IDE independent ! Gluon Library ◦ Charm Controls, Gluon Maps ◦ Local and cloud storage ◦ Material Design for mobile footprint ! Hardware Control ◦ Camera, accelerometer, GPS, gestures, … 6 © 2018 Anderson Software Group
7 © 2018 Anderson Software Group
! MobileApplication ◦ Main class for JavaFX mobile applications ◦
Extends JavaFX Application class ◦ Specify views as factories that are called on demand ! Views ◦ View class invokes FXMLLoader for FXML ◦ Presenter class is the FXML controller class ! Resources ◦ fxml, css, images, licensing files 8 © 2018 Anderson Software Group
© 2018 Anderson Software Group 9
! UI Controls ◦ View, AppBar, SidePopupView ◦ MaterialDesignIcon, Avatar,
CharmListView ◦ FloatingActionButton, ProgressIndicator ! Dialogs ◦ Alert, ExceptionDialog ◦ DatePicker, TimePicker ! API Library 10 © 2018 Anderson Software Group
! Access Hardware Features on Devices ◦ Platform-agnostic ◦ Gluon
open source under GPL license ◦ Optional commercial support ! Supported Services ◦ Accelerometer, Barcode Scan, Battery, Bluetooth, ◦ Camera-Picture, Compass, Device Info, Display Info, ◦ Magnetometer, Orientation, Phone, Storage, etc. 11 © 2018 Anderson Software Group
12 © 2018 Anderson Software Group
13 © 2018 Anderson Software Group
! Client Side Library ◦ Maps data with observable properties
and lists ◦ Supports bidirectional data transfers ◦ Provides notifications ◦ Syncs data automatically ! Supports Common Data Sources ◦ Gluon CloudLink ◦ File provider ◦ REST provider © 2018 Anderson Software Group 14
15 © 2018 Anderson Software Group
! Cloud Storage GluonClient gluonClient = GluonClientBuilder.create().credentials( new GluonCredentials(applicationKey, applicationSecret)).build();
! Local Storage GluonClient gluonClient = GluonClientBuilder .create().credentials(new GluonCredentials( applicationKey,applicationSecret)) .operationMode(OperationMode.LOCAL_ONLY) .build(); © 2018 Anderson Software Group 16
! Message Class class Message { private final StringProperty text
= new SimpleStringProperty(); public StringProperty textProperty() { return text; } } ! Bind to UI Control Label msgLabel = new Label(); msgLabel.textProperty().bind(msg.textProperty()); © 2018 Anderson Software Group 17
! Write Through ◦ Update remote copy when local data
changes ◦ LIST_WRITE_THROUGH ◦ OBJECT_WRITE_THROUGH ! Read Through ◦ Update local copy when remote data changes ◦ LIST_READ_THROUGH ◦ OBJECT_READ_THROUGH © 2018 Anderson Software Group 18
! Cloud Object Storage GluonObservableObject<Message> gluonMsg = DataProvider.retrieveObject( gluonClient.createObjectDataReader("data", Message.class,
SyncFlag.OBJECT_READ_THROUGH, SyncFlag.OBJECT_WRITE_THROUGH)); . . . Label msgLabel = new Label(); msgLabel.textProperty().bind( gluonMsg.get().textProperty()); © 2018 Anderson Software Group 19
! Observable UI Control ObservableList<Message> messages = FXCollections.observableArrayList(); loadMessages(messages) ListView<Message>
listView = new ListView<>(); listView.setItems(messages); ! Advantages ◦ Add and remove elements in list ◦ Updates UI control automatically © 2018 Anderson Software Group 20
! Cloud Storage and Synchronization GluonObservableList<Message> gluonList = DataProvider.retrieveList( gluonClient.createListDataReader("data",
Message.class)); . . . ListView<Message> listView = new ListView<>(); listView.setItems(gluonList); © 2018 Anderson Software Group 21
! Two Levels ◦ Update list for adds and removals
◦ Update list elements ! First Level SyncFlag.LIST_WRITE_THROUGH SyncFlag.LIST_READ_THROUGH ! Second Level SyncFlag.OBJECT_WRITE_THROUGH SyncFlag.OBJECT_READ_THROUGH © 2018 Anderson Software Group 22
! BPData Local Storage GluonObservableList<BPData> gluonBPData = DataProvider.retrieveList( gluonClient.createListDataReader(BPDATA, BPData.class,
SyncFlag.LIST_WRITE_THROUGH, SyncFlag.OBJECT_WRITE_THROUGH)); gluonBPData.stateProperty() .addListener((obs, ov, nv) -> { if (ConnectState.SUCCEEDED.equals(nv)) { bpList.set(gluonBPData); } }); © 2018 Anderson Software Group 23
© 2018 Anderson Software Group 24
! BPMonitor ◦ Four views (Readings, Graph, Stats, Edit) ◦
Stores readings locally on device ◦ No data sharing with other devices ! BPCloud ◦ Four views (Readings, Graph, Stats, Edit) ◦ Writes data to cloud ◦ Data tied to authenticated users ◦ User can access data from any authenticated device © 2018 Anderson Software Group 25
! Service Class void getData() { GluonObservableList<BPData> gluonBPData = DataProvider.retrieveList(
gluonClient.createListDataReader( user.get().getNick() + user.get().getNetworkId(), BPData.class, SyncFlag.LIST_READ_THROUGH, SyncFlag.LIST_WRITE_THROUGH, SyncFlag.OBJECT_READ_THROUGH, SyncFlag.OBJECT_WRITE_THROUGH)); . . . } © 2018 Anderson Software Group 26
! Credentials ◦ Register application on CloudLink ◦ Application keys
supplied by Gluon ! Gluon Client GluonClient gluonClient = GluonClientBuilder.create().credentials( new GluonCredentials(APPKEY, APPSECRET)) .authenticationMode( AuthenticationMode.USER) .build(); © 2018 Anderson Software Group 27
! What is Afterburner? ◦ Lightweight framework ◦ Provides dependency
injection ! Why Use Afterburner? ◦ Injects FXML for views and Java objects ◦ Generates Java boilerplate code ! Advantages ◦ Reduces Java code ◦ Safe and easy object sharing among views 28 © 2018 Anderson Software Group
! JavaFX Advantages ◦ Platform independent source code ◦ Observables,
binding & background tasks to sync UI ◦ Flexible skinning to fit mobile form ! Useful Frameworks ◦ Gluon/Gradle framework for mobile deployment ◦ Based on OpenJDK 9 ◦ Afterburner framework for dependency injection ◦ Platform/IDE independence 29 © 2018 Anderson Software Group
! Thanks for Coming! ◦
[email protected]
@paul_asgteach ◦
[email protected]
@gail_asgteach
! Source Code ◦ asgteach.com ! DevNexus2018 Code Samples ! Click to Download ◦ Q & A 30 © 2018 Anderson Software Group