본문 바로가기

전체 글

(187)
코틀린 리스트 (MutableList, List) 코틀린에서는 읽기 전용 변수(val)와 수정할 수 있는 변수(var)처럼 리스트도 읽기 전용 리스트(list), 수정할 수 있는 리스트(mutable)이 있다. 읽기 전용 리스트는 말 그대로 리스트를 선언할 때 넣은 데이터들을 수정, 삭제, 변경할 수 없다는 의미이다. 따라서 데이터를 읽을 수는 있지만 add, remove 함수를 사용할 경우 컴파일에러가 발생한다. var arrList = listOf("호호", "하하", "헤헤") println(arrList[0]) // O arrList.add("키키") // X 컴파일에러 arrList.remove(1) // X 컴파일에러 반대로 수정할 수 있는 리스트는 기존 자바에서 사용하던 ArrayList와 유사하므로 ArrayList의 함수들을 모두 사용할..
코틀린 표준함수(apply, let, run, with, also, takeIf) 이 포스팅은 빅 너드 랜치의 코틀린 프로그래밍 책을 공부하면서 요약한 내용이다. 코틀린의 표준 함수는 내부적으로 확장함수이며 확장함수를 실행하는 주체를 수신자 또는 수신자 객체라고 한다. 따라서 확장 함수가 호출될 때 수신자 객체의 참조가 확장 함수로 전달된다. 1. apply apply 함수는 구성함수로서 우리가 사용할 객체를 구성할때 반복되는 코드의 양을 줄이기 위해 사용된다. // 일반코드 val f = File("abc.txt") f.setReadable(true) f.setWritable(true) // apply를 사용한다면? val f = File("abc.txt").apply { setReadable(true) setWritable(true) } apply 함수는 람다 내부의 모든 함수 호..
코틀린 Null (안전 호출 연산자, non-null 단언 연산자) 1. 안전 호출 연산자(?) var a = readLine()?.capitalize() 컴파일러가 readLine()? 함수에 접근했을 때 안전 호출 연산자가 있다면 자동적으로 null 값을 검사하는 코드가 실행이된다. 만약 readLine()의 값이 null이 아니면 뒤에 있는 capitalize() 함수를 실행시키고 null이라면 capitalize() 함수가 실행되지 않는다. 2. 단언 연산자 (!!) 단언 연산자는 null이 될 수 없다는 것을 단언하는 연산자다. var a = readLine()!!.capitailize() readLine()값이 null이 아니면 정상적으로 capitailize() 함수를 수행하고 null이면 런타임 시에 NullPoinerException 예외를 발생시킨다.
Android DatePicker Custom 앱 종료시간을 유저가 자유롭게 선택할 수 있도록 DatePicker를 사용하려고 했는데 기존 DatePicker는 유아이 컬러나 버튼 위치를 내 마음대로 변경하기 어려워서 커스텀해서 사용하기로 했다. 먼저 DatePicker를 뜯어보니 기본적으로 NumberPicker라는 위젯을 사용하고 있어서 그대로 구현해보기로 하였다. XML dlg_custom_datepicker 화면 코틀린 CustomDatePicker class CustomDatePicker(var act: Activity) : YKDialog(act) , View.OnClickListener { lateinit var btnCancel : Button // 닫기 lateinit var btnOk : Button // 확인 lateinit va..
Android Retrofit2 콜백 없이 통신 Retrofit2를 사용하다보면 굳이 응답값이 필요없을 때가 있는데 이때 사용할 수 있는게 execute() 함수이다. 기존 소스 ComNet.retroLogin(vo).enqueue(object : retrofit2.Callback { override fun onFailure(call: Call, t: Throwable) { openErrorDlg(resources.getString(R.string.network_error)) } override fun onResponse(call: Call, response: Response) { writeLoginInfo(response.body()) } }) 응답값 없는 소스 NetRetrofit.instance.service.send(vo.data1, vo.da..
안드로이드 블루투스 연결 및 해제 브로드캐스트 리시버 음악 관련된 앱들은 블루투스를 연결했을 때와 해제했을 때 소리가 중지되는 것이 일반적이다. 이러한 기능을 개발할 수 있도록 안드로이드에서는 브로드캐스트 리시버에 블루투스 연결 액션이 존재한다. BluetoothDevice.ACTION_ACL_CONNECTED 블루투스에 기기가 연결되었을 때 BluetoothDevice.ACTION_ACL_DISCONNECTED 블루투스에 기기가 해제되었을 때 이외에도 블루투스 관련 액션이 많으므로 필요한 액션이 필요하다면 공식문서에서 찾아보면 된다. https://developer.android.com/reference/android/bluetooth/BluetoothDevice class BlueToothConnectReceiver : BroadcastReceiver(..
안드로이드 헤드셋 연결 브로드캐스트 리시버 음악 관련 앱들을 보면 이어폰을 뽑았을 때 음악이 중지되는 것이 일반적임. class HeadSetConnectReceiver : BroadcastReceiver() { override fun onReceive(context: Context?, intent: Intent?) { if(intent?.action == (Intent.ACTION_HEADSET_PLUG)) { var headsetState = intent.getIntExtra("state", -1) var headsetName = intent.getStringExtra("name") println("YK $headsetState") println("YK $headsetName") when(headsetState) { 0 -> { instanc..
Asset 폴더에 있는 ogg 파일을 패키지 디렉토리로 복사하기 private void copyToFile(Context context) { AssetManager am = context.getAssets(); String[] fileList = null; try { fileList = am.list("Temp"); for(int i = 0; i