전체 글 53

Android Room 2 - 적용하기

Room을 적용하여 대학교의 학생 목록을 관리하는 예시를 만들어보았다. [구현 사항] db의 필요사항 - Primary key로 있을 id 값, 이름, 전공 삭제/추가 구현 vararg 테스트를 위한 리스트 추가 id 값은 자동으로 계산해서 추가(+1씩) * viewBinding 사용, 코틀린으로 작성되었습니다. enum class Major(val korName:String) { ECONOMICS("경제학과"), BIOLOGY("생물학과"), LAWS("법학과"), ACCOUNTING("회계학과"), HISTORY("역사학과") } 1. Entitiy @Entity(tableName = "student") data class Student( var name : String? = null, var maj..

android Room 1 - 알아보기

1. 기본 설정 build.gradle(Module) 추가 plugins { ... id 'kotlin-kapt' // 추가 } dependencies { ... //2022-04-25 기준 implementation "androidx.room:room-runtime:2.4.2" kapt "androidx.room:room-compiler:2.4.2" } 2. Room의 기본 구성요소 데이터 항목, 데이터 액세스 객체(DAO), 데이터베이스 클래스 ​ 2-1 데이터 항목 저장하려는 객체를 나타내는 항목으로 데이터베이스의 한 행에 저장하려는 값을 말한다. 1개 이상의 PrimaryKey가 필요하다 @Entity data class User( @PrimaryKey val id: Int, val firstNa..

안드로이드 onNewIntent 관련 알아보기, lauchMode

onNewIntent란? intent를 이용해 이미 켜져있는 Activity를 startActivity(intent)로 재호출할 때(launchMode가 singleTop이거나 intent에 FLAG_ACITIVITY_SIGNLE_TOP을 추가한 경우 등 - standard로는 호출이 안됨. ) 불려지는 매서드다. 1. setIntent() onNewIntent가 불려졌을 경우 setIntent()를 하면 getIntent()의 리턴값을 변경하는 해준다. override fun onNewIntent(intent: Intent?) { super.onNewIntent(intent) setResultIntent() setIntent(intent) setResultIntent() } var clickCount ..

kotlin enum class(열거형 클래스)

enum class는 열거 상수들로 이루어져있고 이 열거 상수는 각 객체로 이루어져있다. 상태 값이나 비슷한 속성 값을 상수로 만들어 편하게 사용할 수 있다. 하단의 예시를 보면 쉽게 이해할 수 있다. enum class DayOfWeek{ MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY } fun getWeeklyTodoList(today:DayOfWeek):String{ return when(today){ DayOfWeek.MONDAY -> "work" DayOfWeek.TUESDAY -> "work.." DayOfWeek.WEDNESDAY -> "work..." DayOfWeek.THURSDAY -> "work...." DayOfWeek.FRID..

android, kotlin 시간차이 구하기

android 에서 시간을 가져오는 방법에는 여러가지가 있다. ​ 현재 시간을 가져올 때 많이 쓰는 System.CurrentTimeMillis() , 시간 차이를 구할 때 많이 쓰는 SystemClock.elapsedRealTime() 그 외 SystemClock.uptimesMills(), SystemClock.elapsedRealTimeNanos() 등등이 있다. ​ 1. System.CurrentTimeMillis() - 세계 표준시(UTC)로 1970년 1월 1일 00시 00분 00초를 기점으로 지금까지 얼마나 흘렀는 지를 밀리세컨드 단위로 리턴(Long 타입으로 반환)​​ ​ - 디바이스에 설정된 시각을 기준으로 리턴하기 때문에 시각이 변경되는 경우에는 시간 차이를 구할 때 정확하지 않을 수 ..

kotlin get(), set() 프로퍼티

kotlin은 java와는 다르게 자동으로 getter/setter를 생성해줘서 신경쓸 필요는 없지만, 값을 가지고 오거나 넣는 것 밖에는 하지 못한다. ​ 가지고 올 때 값을 계산해서 가져온다던지, 값을 넣을때 다른 것도 변화 시키고 싶다던지 할 때 get()과 set()이 사용된다. ​ 예제) 스카프의 사이즈(가로*세로)를 구해서 주문을 넣는다고 가정했을 때, 각 주문한 스카프 사이즈와 총 사이즈를 구하기 var totalSize = 0 set(value) { field = value order(value) } fun main(arg: Array) { val scarf1 = Scarf(3, 2) val size1 = scarf1.size addSize(size1) val scarf2 = Scarf(5..

andrid SoundPool 음성파일/효과음 재생

SoundPool을 사용하면 간단하게 음성파일(효과음)을 재생할 수 있다. 메모리에 로드하여 사용하기 때문에 용량은 크지 않는게 좋다. ​ 1. 음성 파일 등록 음성 파일을 res에 New Resource Directory - raw파일을 추가해서 이 raw파일 안에 음성 파일을 넣는다. ​ 2. 코드 (kotlin) //sound pool build 해서 load 시킴 (기본 준비) private val soundPool = SoundPool.Builder().build() //load 할 때 sound id가 리턴으로 옴 var soundId = soundPool.load(this, R.raw.your_video_name, 1) // play soundPool.play(soundId, 1f, 1f, ..

android 권한 요청

권한을 요청할 때 라이브러리만 사용을 했었는데, 제공하는 것만으로도 간단하게 요청할 수 있다. 안드로이드에서 말하는 권한 워크플로는 아래와 같다. ​ 권한 확인 여부 → (권한 없을시) 권한 요청 → (권한 거부시) 권한이 왜 필요한지 설명 → 권한 요청 ​ ​ 상단의 플로우를 따라 예시로 내부 저장소 권한을 요청하는 코드를 작성하면 이렇다. (android develope 예시) when { ContextCompat.checkSelfPermission( this, android.Manifest.permission.READ_EXTERNAL_STORAGE ) == PackageManager.PERMISSION_GRANTED -> { // 내부 저장소 접근하는 코드 작성 } shouldShowRequestP..

android/kotlin Thread, runOnUiThread

안드로이드는 메인 thread에서면 ui 변경이 가능하다. ​ 하지만 ui 변경이 필요없는 작업(DB에서 정보를 가져오는 작업 등)에서는 메인 thread를 사용할 필요가 없다. ​ 그럴 때 thread를 별도로 사용했다가 UI 변경이 필요해지면 해당 사용중인 thread 에서 runOnUiThread()를 호출해서 UI 변경이 가능하다. ​ runOnUiThread()를 호출하면, 현재 tread가 메인 thread가 아닐 경우 메인 thread의 이벤트 큐에 추가된다. Thread(Runnable { // 작업 runOnUiThread { //UI 변경 } // 작업 }).start() https://developer.android.com/reference/android/app/Activity

android NumberPicker custom number/string 원하는 값으로 변경, wrapSelectorWheel

원하는 일자만 나오고, 자연스럽게 넘어가는 선택지를 만들고 싶어서 찾아보던 중 number picker에 원하는 string 이나 값을 넣을 수 있다는 사실을 발견! 바로 테스트 해보기로 했다. val numberPicker : NumberPicker by lazy{ findViewById(R.id.numberPicekr) } val values = listOf("10일","20일","30일") numberPicker.minValue = 0 numberPicker.maxValue = values.size-1 numberPicker.wrapSelectorWheel = false numberPicker.displayedValues = values.toTypedArray() 매우 만족스럽게 잘 나왔다 ㅎㅎ ​..