본문 바로가기
[android] Testing your database - Room 에 대해 알아보자 - 2가지 테스트 방법이 있다. 하나는 android 단말에서 테스트. 다른 하나는 host 개발 장비에서 (not recommended) - 테스트를 앱에서 돌릴 때 Room 은 DAO class 에 대한 mock 생성을 허용한다. 그래서 full db 를 만들 필요 없이 테스트 할 수 있다. 이 기능은 DAO 가 db 에 대한 detail 을 제공하지 않기에 가능하다. Test on an Android device - db 테스트로 권유되는 방법은 Android 단말 위에서 도는 JUnit test 를 돌리는 것이다. 이 테스트는 acivity 를 만들 필요도 없고, UI test 보다 훨씬 빠르기 떄문이다. - test 를 세팅하면, in-memory version 의 db 를 만들어 테스트 하면 .. 2021. 5. 4.
[android] Migrating Room databases - Room 에 대해 알아보자 - Room 은 Migration class 를 써서 db 변화가 있을 때 migrate 를 할 수 있게 해준다. Migration class 는 startVersion 과 endVersion 을 명시한다. runtime 에 Room 은 각각의 Migration class 의 migrate() 함수를 호출해준다. val MIGRATION_1_2 = object : Migration(1, 2){ override fun migrate(db: SupportSQLiteDatabase){ db.execSQL("CREATE TABLE 'Fruit' ('id' INTEGER, 'name' TEXT, PRIMARY KEY('id'))") } } val MIGRATION_2_3 = object : Migration(2,.. 2021. 5. 3.
[android] Create views into a database - Room 에 대해 알아보자 - 2.1.0 이상 버전에서는 Room 에서 SQLite database 의 views 를 지원한다. Room 은 이런 query-backed class 들을 view 라고 부르며, 이것들은 DAO 에서 일반적인 data object 처럼 취급할 수 있다. - entity 와 같이 SELCT 를 view 에 대해서 수행할 수 있다. 그러나 INSERT, UPDATE, DELETE 를 view 에 대해서 수행할 수는 없다. Create a view - View 를 만들기 위해서는 @DatabaseView annotation 을 사용하면 된다. 이 annotation 에 query 값을 지정하면 된다. @DatabaseView(""" SELECT user.id, user.name, user.departmen.. 2021. 5. 2.
[android] Define relationships between objects - Room 에 대해 알아보자 - SQLite 는 relational db 이기 때문에, object 간의 관계를 정의할 수 있다. 대부분의 ORM lib 이 entity object 간에 상호 참조를 지원하지만, Room 은 명시적으로 이것을 금지한다. 금지한 기술적 이유는 아래와 같다. Understand why Room doesn’t allow object references (중략된 번역) https://developer.android.com/training/data-storage/room/referencing-data.html#understand-no-object-references - Room 은 entity class 간 object reference 를 허용하지 않는다. 대신 명시적으로 앱이 필요에 따라 data 를 요.. 2021. 5. 1.
[android] FileProvider 에 알아보자 - FileProvider 는 ContentProvider 의 subclass 로 secure 한 file share 를 관장한다. 이를 통하면 file:/// 형태의 uri 대신 content:// 형태의 uri 를 사용하게 된다. - content URI 는 read, write access 를 임시 permission 으로 부여할 수 있다. content uri 를 가진 Intent 를 통해 타앱에 정보를 보낼 때에도 Intent.setFlags() 를 통해 permission 을 부여할 수 있다. 이 permission 은 전달받는 Activity 가 stack 에 존재할 때 가능하다. Intent 가 Service 로 전달될 때에는 해당 Service 가 running 하는 동안만 부여된 권한이.. 2021. 2. 16.
[android] WebChromeClient 의 file upload - WebView 기본 구현으로는 html 의 를 처리할 수 없다. - Webview 에서 file upload btn 이 클릭되었을 때 WebChromeClient 의 callback 이 불리게 되며, 여기서 param 으로 전달되는 callback 객체에 Uri 를 전달해주어야 file upload 를 시킬 수 있다. - 그럼 file upload btn 이 클릭되었을 때 어떤 callback 이 불리느냐? 이 부분은 직접 테스트한 것은 아니고, 인터넷 정보에 따르면... android 3.0 (HoneyComb) 미만에서는 아래 callback 이.. public void openFileChooser( ValueCallback uploadMsg) android 3.0 이상 ~ 4.1( JB ) 미만.. 2021. 1. 29.
[android] 국제화 text style 입히기 - Eng : Best practices for text on Android Es : Texto en Android: mejores prácticas 여기서 Text, Texto 에만 bold 처리를 하고 싶다면? - 간단한 styling 은 HTML tag 를 이용하자. Text 와 Texto 를 각각 tag 로 감싸고, setText(Html.fromHtml(…)) API 호출을 해주자. - HTML tag 로 해결하기 어려운 복잡한 케이스는 annotation 을 이용하자. strings.xml 에 태그를 사용하면 된다. custom key, value pair 를 xml 에 정의하고, annotation tag 를 사용할 수 있다. string resource 를 SpannedString 로 얻어.. 2021. 1. 27.
[android] finishAffinity() 와 finishAndRemoveTask() 에 대하여 with 실험 FinishAndRemoveTask - API Level 16 (Android 4.1, JB) 에 추가된 API 호출하는 Activity 기준 본인 포함 현재 task 의 '하단'에 있는 모든 Activity 를 종료시켜준다. - Activity Call Stack : A -> B -> C C에서 finishAffinity() 를 호출하면 A, B, C 가 모두 destroy 된다. - Activity Call Stack : A -> B -> C B 에서 handler 를 통해 delay 를 주면서 finishAffinity() 호출하면 A, B 가 destroy 되고 C 는 destroy 되지 않고 살아있는다. 호출하는 Activity 기준 '하단' 만 종료됨에 유의하자. - 참고자료 : https:/.. 2021. 1. 27.
[android] context 마스터 하기! - Context 는 Android API 중 가장 잘못 design 된 녀석이다. Android 에서 신과 같은 object 이다.. - Android 는 component 들을 갖고 있다. Activity, Service, BroadcastReceiver, ContentProvider. Android OS 자체도 component 들을 가지고 있다. WifiManager, Vibrator, PackageManager 등등.. 그리고 Resource 라는 녀석도 있다. Context 를 간단히 이야기하면 component 간의 다리 역할을 하는 component 이다. context 를 통해 component 간의 communication, instantiate, access 등을 할 수 있다. - C.. 2021. 1. 26.
반응형