소개
즐거운 일은 한다는 것은 큰 축복입니다.
여러분에게 얼마나 안드로이드 프로그래밍이 재미있는 것인지 나누려 강사가 되었습니다.
강의
수강평
- [2023 코틀린 강의 무료제공] 기초에서 수익 창출까지, 안드로이드 프로그래밍 A-Z
- [2023 코틀린 강의 무료제공] 기초에서 수익 창출까지, 안드로이드 프로그래밍 A-Z
- [2023 코틀린 강의 무료제공] 기초에서 수익 창출까지, 안드로이드 프로그래밍 A-Z
게시글
질문&답변
대시보드 설정 마지막 단계 Google Play에 앱 게시
아니요, 내부 및 비공개 테스트를 거치지 않고 바로 프로덕션용으로 개시할 수도 있습니다.Play Console을 열고 버전을 만들려는 트랙으로 이동합니다. 공개 테스트(테스트 > 공개 테스트)비공개 테스트(테스트 > 비공개 테스트)내부 테스트(테스트 > 내부 테스트)프로덕션 맨 아래 프로덕션을 눌러주세요.
- 0
- 2
- 538
질문&답변
apirequest.io 로딩 현상 & 사이트 이상함
안녕하세요! https://toolbox.http4k.org/dataclass 이 사이트에서 json을 데이터 클래스로 변환해보세요.
- 0
- 1
- 307
질문&답변
roomDB에 넣을 변수형에 관한 질문
안녕하세요, 혹시 위 답변으로 해견이 되셨을까요?
- 0
- 2
- 332
질문&답변
tvLocationTitle이 Null이에요 ㅠ
안녕하세요, kbs님~ ^^혹시 null 이 뜰 때 Toast 문구는 뭐라고 나오나요?그리고 현재 if 문을 많이 써서 어디서 Null 이 Return 이 되는지를 정확히 알면 에러를 고치는 데에 도움이 될 것 같습니다. Log.d("Debug","여기 1"), Log.d("Debug","여기 2") 이런 식으로 분기마다 로그를 찍어서 어디서 null 이 반환되는지 알려주세요. 같이 에러를 해결해봐요~ㅎㅎ 감사합니다!
- 0
- 3
- 493
질문&답변
보다가 궁금하게생겨서 질문드립니다.
안녕하세요! 준하님 ~ ^^ 조이스입니다. Kotlin, Java 와 같은 객체 지향 프로그래밍은 클래스를 사용하고 관계형 데이터 베이스에서는 테이블을 사용하기 때문에 객체 모델과 관계형 모델 간에 불일치가 발생하게 됩니다.ORM(Object relational mapping)은 객체 간의 관계를 바탕으로 SQL을 자동으로 생성하여 불일치를 해결해줍니다. 즉 객체를 통해 간접적으로 데이터 베이스의 데이터를 다루는 것이지요. Room 이 대표적인 안드로이드의 ORM 라이브러리이며, 말씀해주신 것처럼 JPA, Hibernate, Mybatis도 그 예 중에 하나라고 할 수 있습니다. 함수의 이름과 같은 경우는 무엇을 적어주셔도 상관 없습니다. 또한 쿼리문을 사용하고 싶으시다면 아래 예시와 같이 @Query("Query 문") 어노테이션을 사용하여 DB에 접근 할 수도 있습니다. 답변이 학습에 도움이 되었기를 바랍니다. 혹시 추가적인 질문 있으시면 남겨주세요.좋은 하루 보내세요 :) @Dao interface TestDao { @Query("SELECT * FROM Test") fun getAll(): LiveData> @Query("SELECT * FROM task_table WHERE taskId = :key") fun get(key: Long): LiveData @Query("SELECT * FROM task_table ORDER BY taskId DESC") fun getAll(): LiveData> @Insert(onConflict = OnConflictStrategy.REPLACE) // 중복 ID일 경우 교체 fun insert(todo: Test) @Update fun update(todo: Test) @Delete fun delete(todo: Test) }
- 0
- 2
- 283
질문&답변
Geocoder getFromLocation 에러
안녕하세요! 조이스입니다. 질문 주신 내용을 보면, 현재 버전이 변경되어 deprecated 된 함수를 사용하다가 나는 에러로 보이는데요, 말씀해주신 것처럼 GeocodeListener 를 구현해주시면 됩니다. GeocodeListener 인터페이스는 onGeocode 함수를 구현해주면 됩니다. Geocode가 오는 것을 기다리고 있다가, Geocode를 받으면 onGeocode 함수를 실행하는 것이지요. val geocodeListener = @RequiresApi(33) object : Geocoder.GeocodeListener { override fun onGeocode(addresses: MutableList) { // 주소 리스트를 가지고 할 것을 적어주면 됩니다. } }혹은, 람다식을 사용하여 아래와 같이 적어주어도 됩니다. val geocodeListener = Geocoder.GeocodeListener { addresses -> // 주소 리스트를 가지고 할 것을 적어주면 됩니다. } 자 그럼 MainActivity.kt 의 updateUI 함수의 수정된 전체 코드를 봐볼까요? private fun updateUI() { locationProvider = LocationProvider(this@MainActivity) //위도와 경도 정보를 가져옵니다. if (latitude == 0.0 || longitude == 0.0) { latitude = locationProvider.getLocationLatitude() longitude = locationProvider.getLocationLongitude() } if (latitude != 0.0 || longitude != 0.0) { // [[[[[[[[[[[[[ 수정된 코드 시작]]]]]]]]]]]]]]]]] //1. 현재 위치를 가져오고 UI 업데이트 //현재 위치를 가져오기 if (Build.VERSION.SDK_INT ) { // 주소 리스트를 가지고 할 것을 적어주면 됩니다. address = addresses[0]; address?.let { binding.tvLocationTitle.text = "${it.thoroughfare}" // 예시: 역삼 1동 binding.tvLocationSubtitle.text = "${it.countryName} ${it.adminArea}" // 예시 : 대한민국 서울특별시 } } override fun onError(errorMessage: String?) { address = null Toast.makeText(this@MainActivity, "주소가 발견되지 않았습니다.", Toast.LENGTH_LONG).show() } } geocoder.getFromLocation(latitude, longitude, 7, geocodeListener) } // [[[[[[[[[[[[[ 수정된 코드 끝]]]]]]]]]]]]]]]]] //2. 현재 미세먼지 농도 가져오고 UI 업데이트 getAirQualityData(latitude, longitude) } else { Toast.makeText( this@MainActivity, "위도, 경도 정보를 가져올 수 없었습니다. 새로고침을 눌러주세요.", Toast.LENGTH_LONG ).show() } } 위 코드의 수정된 부분을 보면 SDK 가 33 이상인 경우 GeocodeListener 를 먼저 구현해준 후 getFromLocation 함수를 실행해줍니다. 33 미만인 경우에는 기존 코드를 그대로 적어주면 됩니다. 열심히 수업을 들어주셔서 진심으로 감사드립니다 :) 추가적인 질문 있으시면 남겨주세요!
- 0
- 2
- 1.5K
질문&답변
roomdatabase 설치하면 에러 발생.
안녕하세요, 혹시 위 답변으로 해결이 되지 않았나요?
- 0
- 3
- 873
질문&답변
데이터베이스 백업관련 질문있어요
안녕하세요, comst19님!앱을 지웠다가 깔아도 데이터를 복구하는 방법을 찾고 계시는군요!룸 데이터베이스는 로컬 데이터베이스이므로 사실 외부 저장소의 기능을 하기에는 어려운 면이 있습니다. 그렇기 때문에 따로 파일을 통해 외부 저장소에 옮기고 다운로드를 하는 것은 권장하지 않습니다. 만약 comst19님이 어플을 삭제했다가 다시 설치하더라도 데이터를 복구하고 싶다면, Firestore 와 같은 외부저장소를 사용해보는 것은 어떨까요? Firestore는 파이어베이스에서 나온 제품으로, 서버와 데이터베이스의 기능을 동시에 해주어 comst19님이 룸 데이터베이스를 통해 값을 읽어오고 쓰고 했던 것처럼 외부 저장소에 값을 저장하고, 또 필요할 때 불러오게 됩니다. 룸 데이터베이스와 달리 내부에 저장하는 것이 아닌 외부에 저장하므로 comst1님이 새로운 폰을 사용하거나, 여러 기기에서 데이터에 접근하더라도 무리없이 작동할 것입니다. 해당 Firestore 강의는 2023년 하반기 업데이트에 강의가 업데이트될 예정입니다! 질문 남겨주셔서 감사합니다! 혹시 그 전에 따로 혼자 firestore 해보시다가 안되는 부분 있으면, 강의내용 관련 아니더라도 여기에 질문 남겨주시면 답변 드리도록 하겠습니다 🙏🏻
- 0
- 1
- 371
질문&답변
뷰의 속성에 대한 질문이에요
안녕하세요 오카네님!맞습니다, 웹에서는 CSS 속성을 재사용하는 것이 가능했습니다. 당연히 안드로이드도 됩니다!강의 속에서는 여러분들이 디자인 속성 값에 익숙해지고, 여러 값들을 바로 넣고 변경해보는 것을 실습하셨으면 좋겠어서 그렇게 구성을 했답니다. 안드로이드에서는 어떻게 속성값을 재활용할 수 있을까요?첫 번째로는 태그를 사용하는 방법입니다. 위에 로고와 제목을 나타내는 'titlebar.xml'을 아래와 같이 작성합니다. 그리고 아래처럼 재 사용하고 싶은 레이아웃에서 태그를 사용하여 재사용할 수 있습니다. // 여기서 재사용합니다. ... 두 번째로는 커스텀 뷰도 생성할 수 있습니다. 버튼, 이미지뷰, 텍스트뷰 모두 강의에서 배웠다시피 "View" 클래스를 상속받은 클래스들입니다. 이런 뷰들을 우리도 직접 만들 수가 있습니다.해당 내용은 여기서 설명하기는 약간 길어서요, 자세한 내용은 아래 안드로이드 공식 문서를 참고 바랍니다.https://developer.android.com/develop/ui/views/layout/custom-views/create-view 질문에 답변이 되었기를 바랍니다! 감사합니다 :)
- 0
- 1
- 391
질문&답변
Permission Request Code 와 requestCode가 같은지 if문에서 확인하는 이유가 무엇인가요?
안녕하세요, atg0614님!질문해 주신 내용 "Permission Request Code 와 requestCode가 같은지 if문에서 확인하는 이유가 무엇인가요? " 에 대하여 답변드리겠습니다.requestCode는 onRequestPermissionResult, onActivityResult 와 같이 다른 액티비티(를 비롯한 다양한 인텐트)를 확인하고 다시 돌아오는 경우에 쓰입니다. 그리고 액티비티에 하나만 구현하기 때문에 MainActivity A 에서 Activity B 로 갔다가 돌아오는지, Activity C로 갔다가 돌아오는지 확인하기 위함에 있습니다.아래 예시처럼 requestCode를 사용하면 카메라를 갔다왔는지, 전화번호부에 갔다왔는지를 확인할 수가 있습니다! 퍼미션의 종류에도 여러가지가 있으니 각각 다른 requestCode를 준다면, requestCode에 따라 실행방법을 분리할 수도 있겠죠? @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == Activity.RESULT_CANCELED) { // code to handle cancelled state } else if (requestCode == CAMERA_REQUEST) { // code to handle data from CAMERA_REQUEST } else if (requestCode == CONTACT_VIEW) { // code to handle data from CONTACT_VIEW } }답변이 도움이 되기를 바라겠습니다. (추가로 할인 기간에 못 사셨다니 마음이 아픕니다 ㅜㅜ 완강하시고 code.with.joyce@gmail.com 으로 메일 하나 주세요 ^^)
- 0
- 1
- 310