from grails to android: a simple journey
TRANSCRIPT
![Page 1: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/1.jpg)
FROM GRAILS TO ANDROID A SIMPLE JOURNEY
![Page 2: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/2.jpg)
GRAILS
@BRWNGRLDEV
![Page 3: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/3.jpg)
ANDROID
@BRWNGRLDEV
![Page 4: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/4.jpg)
OVERVIEW
@BRWNGRLDEV
![Page 5: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/5.jpg)
OVERVIEW
▸Project Structure
@BRWNGRLDEV
![Page 6: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/6.jpg)
OVERVIEW
▸Project Structure
▸User Interface
@BRWNGRLDEV
![Page 7: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/7.jpg)
OVERVIEW
▸Project Structure
▸User Interface
▸Dependency Injection
@BRWNGRLDEV
![Page 8: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/8.jpg)
OVERVIEW
▸Project Structure
▸User Interface
▸Dependency Injection
▸Persistence
@BRWNGRLDEV
![Page 9: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/9.jpg)
PROJECT STRUCTURE@BRWNGRLDEV
![Page 10: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/10.jpg)
GRAILS APP STRUCTURE
grails create-app
@BRWNGRLDEV
![Page 11: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/11.jpg)
GRAILS APP STRUCTURE
grails create-app
@BRWNGRLDEV
![Page 12: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/12.jpg)
GRAILS APP STRUCTURE
@BRWNGRLDEV
![Page 13: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/13.jpg)
ANDROID APP STRUCTURE
@BRWNGRLDEV
![Page 14: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/14.jpg)
ANDROID APP STRUCTURE
@BRWNGRLDEV
![Page 15: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/15.jpg)
ANDROID APP STRUCTURE
@BRWNGRLDEV
▸app directory
![Page 16: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/16.jpg)
ANDROID APP STRUCTURE
@BRWNGRLDEV
▸app directory
▸test directories
![Page 17: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/17.jpg)
ANDROID APP STRUCTURE
@BRWNGRLDEV
▸app directory
▸test directories
▸gradle wrapper
![Page 18: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/18.jpg)
ANDROID APP STRUCTURE
@BRWNGRLDEV
![Page 19: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/19.jpg)
ANDROID APP STRUCTURE
@BRWNGRLDEV
most source code
![Page 20: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/20.jpg)
ANDROID APP STRUCTURE
@BRWNGRLDEV
images
![Page 21: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/21.jpg)
ANDROID APP STRUCTURE
@BRWNGRLDEV
views
![Page 22: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/22.jpg)
ANDROID APP STRUCTURE
@BRWNGRLDEV
launcher icons
![Page 23: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/23.jpg)
LAUNCHER ICONS
@BRWNGRLDEV
https://developer.android.com/guide/practices/ui_guidelines/icon_design_launcher.html
![Page 24: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/24.jpg)
ANDROID APP STRUCTURE
@BRWNGRLDEV
strings, colors, sizes, etc.
![Page 25: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/25.jpg)
DOMAIN MODELS
@BRWNGRLDEV
![Page 26: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/26.jpg)
GRAILS DOMAIN CLASS
@BRWNGRLDEV
![Page 27: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/27.jpg)
GRAILS DOMAIN CLASS
@BRWNGRLDEV
▸BookSpec
▸BookController
▸BookControllerSpec
▸/book/edit.gsp
▸/book/create.gsp
▸/book/index.gsp
▸/book/show.gsp
![Page 28: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/28.jpg)
ANDROID DOMAIN CLASS
@BRWNGRLDEV
![Page 29: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/29.jpg)
ANDROID DOMAIN CLASS
@BRWNGRLDEV
▸Book
![Page 30: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/30.jpg)
ANDROID DOMAIN CLASS
@BRWNGRLDEV
▸Book
![Page 31: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/31.jpg)
ANDROID DOMAIN CLASS
@BRWNGRLDEV
![Page 32: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/32.jpg)
ANDROID DOMAIN CLASS
@BRWNGRLDEV
![Page 33: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/33.jpg)
ANDROID DOMAIN CLASS
@BRWNGRLDEV
MVP
![Page 34: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/34.jpg)
ANDROID DOMAIN CLASS
@BRWNGRLDEV
▸BookTest
▸BookPresenter
▸BookPresenterTest
▸BookView
▸BookActivity
▸BookActivityTest
▸activity_book.xml
▸activity_insert_update_book.xml
![Page 35: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/35.jpg)
@BRWNGRLDEV
![Page 36: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/36.jpg)
CONFIGURATION
@BRWNGRLDEV
![Page 37: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/37.jpg)
GRAILS - BUILD.GRADLE
@BRWNGRLDEV
![Page 38: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/38.jpg)
GRAILS - BUILD.GRADLE
@BRWNGRLDEV
![Page 39: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/39.jpg)
ANDROID - BUILD.GRADLE
@BRWNGRLDEV
![Page 40: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/40.jpg)
ANDROID - BUILD.GRADLE
@BRWNGRLDEV
![Page 41: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/41.jpg)
ANDROID - BUILD.GRADLE
@BRWNGRLDEV
![Page 42: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/42.jpg)
GRADLE COMMANDS
@BRWNGRLDEV
▸gradle tasks
▸gradle clean
▸gradle test
▸gradle assemble
![Page 43: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/43.jpg)
GRADLE COMMANDS
@BRWNGRLDEV
▸gradle tasks
▸gradle clean
▸gradle test
▸gradle assemble
![Page 44: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/44.jpg)
PROJECT STRUCTURE
@BRWNGRLDEV
▸Folder layout
▸Domain models
▸Gradle Configuration
![Page 45: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/45.jpg)
@BRWNGRLDEV
![Page 46: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/46.jpg)
USER INTERFACE@BRWNGRLDEV
![Page 47: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/47.jpg)
GRAILS UI
@BRWNGRLDEV
![Page 48: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/48.jpg)
GRAILS GSP PAGE
@BRWNGRLDEV
![Page 49: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/49.jpg)
GRAILS GSP PAGE
@BRWNGRLDEV
![Page 50: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/50.jpg)
GRAILS GSP PAGE
@BRWNGRLDEV
![Page 51: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/51.jpg)
GRAILS GSP PAGE
@BRWNGRLDEV
![Page 52: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/52.jpg)
GRAILS GSP PAGE
@BRWNGRLDEV
<f:display bean=“book”/>
![Page 53: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/53.jpg)
ANDROID UI
@BRWNGRLDEV
![Page 54: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/54.jpg)
ANDROID UI
@BRWNGRLDEV
![Page 55: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/55.jpg)
@BRWNGRLDEV
XML?!
ARE YOU KIDDING ME?!!!
![Page 56: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/56.jpg)
@BRWNGRLDEV
XML?!
ARE YOU KIDDING ME?!!!
![Page 57: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/57.jpg)
@BRWNGRLDEV
XML?!
ARE YOU KIDDING ME?!!!
![Page 58: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/58.jpg)
@BRWNGRLDEV
XML?!
ARE YOU KIDDING ME?!!!
![Page 59: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/59.jpg)
ANDROID LAYOUT GUI
@BRWNGRLDEV
![Page 60: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/60.jpg)
ANDROID LAYOUT GUI
@BRWNGRLDEV
![Page 61: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/61.jpg)
ANDROID LAYOUT GUI
@BRWNGRLDEV
![Page 62: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/62.jpg)
ANDROID XML LAYOUT
@BRWNGRLDEV
![Page 63: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/63.jpg)
ANDROID XML LAYOUT
@BRWNGRLDEV
![Page 64: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/64.jpg)
ANDROID XML LAYOUT
@BRWNGRLDEV
![Page 65: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/65.jpg)
ANDROID XML LAYOUT
@BRWNGRLDEV
![Page 66: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/66.jpg)
STYLE & SIZE RESOURCES
@BRWNGRLDEV
![Page 67: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/67.jpg)
STYLE & SIZE RESOURCES
@BRWNGRLDEV
![Page 68: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/68.jpg)
STYLE & SIZE RESOURCES
@BRWNGRLDEV
![Page 69: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/69.jpg)
STYLE & SIZE RESOURCES
@BRWNGRLDEV
![Page 70: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/70.jpg)
STYLE & SIZE RESOURCES
@BRWNGRLDEV
▸colors
▸styles
▸strings
▸sizes
▸themes
![Page 71: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/71.jpg)
STYLE & SIZE RESOURCES
@BRWNGRLDEV
strings, colors, sizes, etc.
![Page 72: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/72.jpg)
https://www.flickr.com/photos/bionicteaching/14668480106
![Page 73: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/73.jpg)
https://developer.android.com/training/basics/supporting-devices/screens.html
DEVELOPER DOCS
@BRWNGRLDEV
![Page 74: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/74.jpg)
USER INTERFACE
@BRWNGRLDEV
▸GSP pages
▸XML layout
▸Resource folders
![Page 75: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/75.jpg)
@BRWNGRLDEV
![Page 76: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/76.jpg)
DEPENDENCY INJECTION
@BRWNGRLDEV
![Page 77: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/77.jpg)
DEPENDENCY INJECTION
@BRWNGRLDEV
THE CLIENT DELEGATES TO EXTERNAL CODE (THE INJECTOR) THE RESPONSIBILITY OF
PROVIDING ITS DEPENDENCIES. https://en.wikipedia.org/wiki/Dependency_injection
![Page 78: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/78.jpg)
GRAILS - DEPENDENCY INJECTION
@BRWNGRLDEV
![Page 79: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/79.jpg)
GRAILS - DEPENDENCY INJECTION
@BRWNGRLDEV
![Page 80: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/80.jpg)
GRAILS - DEPENDENCY INJECTION
@BRWNGRLDEV
![Page 81: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/81.jpg)
GRAILS - DEPENDENCY INJECTION
@BRWNGRLDEV
![Page 82: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/82.jpg)
ANDROID - SIMPLE APPROACH
@BRWNGRLDEV
public class Injector {
}
![Page 83: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/83.jpg)
ANDROID - SIMPLE APPROACH
@BRWNGRLDEV
public class Injector { private static BookService bookService;
}
![Page 84: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/84.jpg)
ANDROID - SIMPLE APPROACH
@BRWNGRLDEV
public class Injector { private static BookService bookService;
public static BookService provideBookService () { if ( bookService == null ) { bookService = new BookService(); } return bookService;}
}
![Page 85: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/85.jpg)
ANDROID - SIMPLE APPROACH
@BRWNGRLDEV
public class Activity { private BooksPresenter booksPresenter;
@Overrideprotected void onCreate (Bundle savedInstanceState) { …
booksPresenter = new BooksPresenter( Injector.provideBookService() ); }
}
![Page 86: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/86.jpg)
ANDROID - DAGGER
@BRWNGRLDEV
http://google.github.io/dagger/
![Page 87: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/87.jpg)
ANDROID - DAGGER
@BRWNGRLDEV
public class BooksPresenter { private final BookService bookService;
}
![Page 88: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/88.jpg)
ANDROID - DAGGER
@BRWNGRLDEV
public class BooksPresenter { private final BookService bookService;
@Inject BooksPresenter(BookService bookService) {
this.bookService = bookService; }
}
![Page 89: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/89.jpg)
ANDROID - DAGGER
@BRWNGRLDEV
@Module public class AppModule {
}
![Page 90: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/90.jpg)
ANDROID - DAGGER
@BRWNGRLDEV
@Module public class AppModule {
@Provides @Singleton BookService provideBookService() {
return new BookService(); }
}
![Page 91: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/91.jpg)
ANDROID - DAGGER
@BRWNGRLDEV
@Provides @Singleton BookService provideBookService() {
return new BookService(); }
@Inject BooksPresenter(BookService bookService) {
this.bookService = bookService; }
![Page 92: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/92.jpg)
DEPENDENCY INJECTION
@BRWNGRLDEV
▸Spring
▸Simple Injector
▸Dagger
![Page 93: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/93.jpg)
@BRWNGRLDEV
![Page 94: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/94.jpg)
PERSISTENCE@BRWNGRLDEV
![Page 95: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/95.jpg)
@BRWNGRLDEVhttp://gorm.grails.org/latest/
![Page 96: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/96.jpg)
@BRWNGRLDEV
GORMdef book = new Book(title: ‘Clean Code’)
book.save()
![Page 97: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/97.jpg)
@BRWNGRLDEV
GORMdef book = new Book(title: ‘Clean Code’)
book.save()
def book = Book.findByTitle(‘Clean Code’)
println book
![Page 98: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/98.jpg)
@BRWNGRLDEV
GORMdef book = new Book(title: ‘Clean Code’)
book.save()
def book = Book.findByTitle(‘Clean Code’)
println book
def book = Book.get(1)
book.delete()
![Page 99: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/99.jpg)
https://developer.android.com/training/basics/data-storage/databases.html
ANDROID
@BRWNGRLDEV
![Page 100: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/100.jpg)
https://developer.android.com/training/basics/data-storage/databases.html
ANDROID
@BRWNGRLDEV
![Page 101: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/101.jpg)
SQLITE
@BRWNGRLDEV
SQLiteDatabase db = dbHelper.getWritableDatabase();
![Page 102: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/102.jpg)
SQLITE
@BRWNGRLDEV
SQLiteDatabase db = dbHelper.getWritableDatabase();
ContentValues values = new ContentValues(); values.put(COLUMN_NAME_TITLE, title);
![Page 103: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/103.jpg)
SQLITE
@BRWNGRLDEV
SQLiteDatabase db = dbHelper.getWritableDatabase();
ContentValues values = new ContentValues(); values.put(COLUMN_NAME_TITLE, title);
db.insert( TABLE_NAME, null, values);
![Page 104: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/104.jpg)
SQLITE VS. GORM
@BRWNGRLDEV
SQLiteDatabase db = dbHelper.getWritableDatabase();
ContentValues values = new ContentValues(); values.put(COLUMN_NAME_TITLE, title);
db.insert( TABLE_NAME, null, values);
def book = new Book(title: ‘Clean Code’)
book.save()
![Page 105: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/105.jpg)
REALM
@BRWNGRLDEVhttp://realm.io
![Page 106: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/106.jpg)
REALM
@BRWNGRLDEV
![Page 107: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/107.jpg)
REALM
@BRWNGRLDEV
▸Easy to Set Up
![Page 108: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/108.jpg)
REALM
@BRWNGRLDEV
▸Easy to Set Up
▸Faster than ORMs
![Page 109: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/109.jpg)
REALM
@BRWNGRLDEV
▸Easy to Set Up
▸Faster than ORMs
▸Has a Fluent API
![Page 110: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/110.jpg)
REALM - CREATING A RECORD
@BRWNGRLDEV
realm.executeTransaction( new Realm.Transaction() { @Override public void execute (Realm realm) { Book book = realm.createObject(Book.class); book.setTitle(“Clean Code"); }} );
![Page 111: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/111.jpg)
REALM - CREATING A RECORD
@BRWNGRLDEV
realm.executeTransaction( new Realm.Transaction() { @Override public void execute (Realm realm) { Book book = realm.createObject(Book.class); book.setTitle(“Clean Code"); }} );
![Page 112: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/112.jpg)
REALM - QUERY
@BRWNGRLDEV
RealmResults<Book> results = realm.where(Book.class) .equalTo("title", “Clean Code") .or() .equalTo("title", “Clean Codez") .findAll();
![Page 113: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/113.jpg)
REALM - QUERY
@BRWNGRLDEV
RealmResults<Book> results = realm.where(Book.class) .equalTo("title", “Clean Code") .or() .equalTo("title", “Clean Codez") .findAll();
![Page 114: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/114.jpg)
REALM - CHANGE LISTENERS
@BRWNGRLDEV
bookListener = new RealmChangeListener() { @Override public void onChange(Book book) { // make changes }};
![Page 115: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/115.jpg)
REALM - CHANGE LISTENERS
@BRWNGRLDEV
bookListener = new RealmChangeListener() { @Override public void onChange(Book book) { // make changes }};
book = realm.where(Book.class).equalTo("id", 1).findFirst(); book.addChangeListener(bookListener);
![Page 116: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/116.jpg)
PERSISTENCE
@BRWNGRLDEV
▸GORM
▸Sqlite
▸Realm
![Page 117: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/117.jpg)
@BRWNGRLDEV
![Page 118: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/118.jpg)
SUMMARY
@BRWNGRLDEV
![Page 119: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/119.jpg)
SUMMARY
▸Project Structure
@BRWNGRLDEV
![Page 120: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/120.jpg)
SUMMARY
▸Project Structure
▸User Interface
@BRWNGRLDEV
![Page 121: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/121.jpg)
SUMMARY
▸Project Structure
▸User Interface
▸Dependency Injection
@BRWNGRLDEV
![Page 122: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/122.jpg)
SUMMARY
▸Project Structure
▸User Interface
▸Dependency Injection
▸Persistence
@BRWNGRLDEV
![Page 123: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/123.jpg)
KEY TAKEAWAY
@BRWNGRLDEV
![Page 124: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/124.jpg)
KEY TAKEAWAY
@BRWNGRLDEV
ANDROID IS REALLY HARD!
![Page 125: From Grails to Android: A Simple Journey](https://reader031.vdocuments.mx/reader031/viewer/2022022412/58f04e4b1a28ab90168b4643/html5/thumbnails/125.jpg)
KEY TAKEAWAY
@BRWNGRLDEV
ANDROID IS REALLY HARD!FUN