본문 바로가기

전체 글407

[Android/Kotlin] 안드로이드 Room Database 사용하기(2) Select... 안녕하세요. 오늘 Room Databse를 활용해서 데이터를 가져오는 방법에 대해서 말씀드리겠습니다. 지난 시간에는 Room Database에 대한 설명과 간단하게 데이터를 입력하는 방법에 대해서 알아봤습니다. 2021/01/30 - [Android/AAC] - [Android/Kotlin] 안드로이드 Room Database 사용하기(1) 오늘은 입력한 데이터를 가져오도록 하겠습니다. 저장하기 버튼을 누르면 바로 아래 ReclclerView 목록에 가져오도록 합니다. 완성된 모습은 아래와 같습니다. 프로젝트 구조는 아래와 그림과 같습니다. STEP01. Resource 클래스 만들기 Resource 파일은 sealed class 입니다. sealed라는 말은 봉인된이라는 의미로 무언가를 봉인하고 있는 .. 기리's Android 이야기 2021. 2. 1.
[Android/Error] 안드로이드 ViewModelProvider 에러발생 VIewModel을 사용하던 중 에러가 발생했습니다. 에러가 발생했던 코드 부분입니다. MainViewMdoel를 생성할 때 찾을 수 없다는 에러였습니다. mainViewModel = ViewModelProvider(this).get(MainViewModel::class.java) 파라미터로 owner 객체뿐만 아니라 factory 객체를 만들어서 넘겨서 같이 해결했습니다. [MainActivity.kt] mainViewModel = ViewModelProvider(this, MainViewModel.Factory(application)).get(MainViewModel::class.java) [MainViewModel.kt] class Factory( private val application: App.. 기리's Android 이야기 2021. 1. 31.
[Android/Kotlin] 안드로이드 Section(Group) RecyclerView 만들기 안녕하세요. 오늘은 Section 또는 Group RecyclerView에 대해서 알아보겠습니다. 여기서 말하는 Section 또는 Group이라는 말은 대분류안에 소분류가 있다고 생각하시면 될 것 같습니다. 예를들어 데이터를 일단 날짜별로 일단 보여주고, 해당날짜에 상세 내역을 보여주는 용도로 보면 될 것 같습니다. 그래서 오늘은 아래와 같은 시나리오를 준비했습니다. 1. 그룹(고등학교, 대학교, 직장 등) 리스트 보여주기 2. 그룹 내 친구 리스트 보여주기 완성된 모습은 아래와 같습니다. STEOP01. 데이터 클래스 만들기 두가지 데이터 클래스가 존재합니다. 하나는 그룹별 친구리스트를 보여주는 SectionModel 클래스이고, 친구 정보를 담는 Friend 클래스를 만들어 줍니다. [Section.. 기리's Android 이야기 2021. 1. 31.
[Android/Kotlin] 안드로이드 Room Database 사용하기(1) 안녕하세요. Room Datebase를 사용하는 방법에 대해서 알아보도록 하겠습니다. 먼저 Room Database는 안드로이드에 내장된 SQLite를 통한 데이터베이스 사용에 도움을 주는 AAC 라이브러리입니다. Room은 SQLite에 대한 추상화 레이어를 제공하여 데이터베이스 사용을 쉽게 해줍니다. 여기서 말하는 데이터베이스는 Local 데이터베이스로, 사용자의 폰에 저장하는 형태입니다. 간단한 데이터를 처리하는 경우 쉽고 빠르게 처리할 수 있는 장점이 있습니다. Room은 아래와 같이 세가지 주요 구성요소가 있습니다. (공식문서) 1. Entity: 데이터베이스 내의 테이블을 나타냅니다. POJO클래스에 @Entity 어노테이션을 추가하여 생성합니다. 2. Dao: 데이터베이스에 액세스하는데 사용.. 기리's Android 이야기 2021. 1. 30.
[Android/Kotlin] 안드로이드 Spinner 커스텀 해보기(3) feat. Drop Down Menu 2021/01/30 - [Android/Material Design] - [Android/Kotlin] 안드로이드 Spinner 커스텀 해보기 (1) 2021/01/30 - [Android/Material Design] - [Android/Kotlin] 안드로이드 Spinner 커스텀 해보기(2) feat. Hint 만들기 안녕하세요. 이번시간에는 Spinner 위젯 사용시 Drop Down Menu도 커스텀 하는 방법에 대해서 알아보겠습니다. 커스텀 하기 이전에는 보통 텍스값을 많이 사용합니다. 이번에는 이미지와 텍스트값이 같이 나타나도록 해보겠습니다. 완성된 모습은 아래와 같습니다. 이전 Spinner 구현 코드에서 이어서 해보겠습니다. 필요하신 분들은 이전 블로그 글을 참고부탁드립니다. STEP01.. 기리's Android 이야기 2021. 1. 30.
[Android/Kotlin] 안드로이드 Spinner 커스텀 해보기(2) feat. Hint 만들기 안녕하세요. 이번에는 Spinner 위젯에 간단하게 Hint를 넣은 방법에 대해서 알아보겠습니다. 이전에는 Activity가 onCreate 될때마다 자동적으로 연도는 2021년 월은 1월이 자동으로 선택되었습니다. 2021/01/30 - [Android/Material Design] - [Android/Kotlin] 안드로이드 Spinner 커스텀 해보기 (1) 즉, Array의 첫번째 아이템이 선택되고 있습니다. 이러한 액션을 막거나 또는 사용자에게 Hint 메시지를 줄 수 있는 방법을 소개해 드립니다. 완성된 모습은 아래와 같습니다. 첫번째 항목인 연도와 월을 클릭하면 아무런 반응이 없습니다. STEP01. Array 첫번째 항목에 Hint 값 추가하기 Array의 첫번째 요소에 연도와, 월을 추가.. 기리's Android 이야기 2021. 1. 30.
[Android/Kotlin] 안드로이드 Spinner 커스텀 해보기(1) 안녕하세요. 오늘은 지난 시간에 이어서 간단하게 Spinner 위젯을 커스텀해보도록 하겠습니다. UI적으로 사용하기가 너무 밋밋하다가 생각된다면 커스텀을 해보는것을 추천드립니다. 완성된 모습은 아래와 같습니다. 저번에 시간에 이어서 연도와 월을 나타내는 스피너의 디자인을 변경했습니다. (참고로 Drop Down Menu는 아직 변경되지 않았습니다.) ArrayAdapter를 활용한 Spinner 구현 참고: https://android-dev.tistory.com/35 STEP01. Spinner Background 만들기 아래와같이 Spinner의 배경을 만들어 줍니다. layer-list는 아이템을 중첩시킬때 사용합니다. [bg_spinner_year.xml] [bg_spinner_month.xml].. 기리's Android 이야기 2021. 1. 30.
[Android Studio/Kotlin] 안드로이드 Live Template 사용하기 안녕하세요. 오늘은 안드로이드 스튜디오에서 Live Template 기능 대해서 알아보겠습니다. Live Template은 단축 키워드를 사용하여 Boilder Plate 코드를 쉽게 작성할 수 있게 도와주는 기능입니다. 간단한 사용예를 보여드리면 아래와 같습니다. Date 형식을 String 타입으로 변환하기 위해 아래와 같은 코드가 필요합니다. 이를 Live Template에 미리 등록해 놓으면 간단한 단축어로 편리하게 사용할 수 있습니다. 그럼 이제 Live Template을 추가하는 방법에 대해서 알아보겠습니다. STEP01. Settings > Edit > Code Style > LiveTemplate 이동 STEP02. Live Temple 등록하기 우측의 플러스 아이콘을 클릭하시면 아래와 같.. 기리's Android 이야기 2021. 1. 26.
[Android/Kotlin] 안드로이드 ArrayAdapter를 활용한 Spinner 구현 오늘은 Spinner 위젯을 사용해서 아이템 리스트를 구현하고 사용자 선택하도록 하는 방법을 알아보겠습니다. Drop Down Menu라고 해서 Spinner를 클릭하면 아래로 메뉴 목록이 나타나고, 아이템을 클릭하면 어떠한 이벤트가 발생하도록 할 수 있습니다. 사용자가 연도와 월을 선택할 수 있는 화면을 만들어 보겠습니다. 완성된 모습은 아래와 같습니다. STEP01. 기본 레이아웃 만들기 [activity_main.xml] STEP02. Spinner 값 만들기 레이아웃에 스피너를 포함했지만 아직 스피너에 아무 값도 들어 있지 않은 상태입니다. 스피너에 값을 넣기 위해서 문자열 배열이 필요합니다. 여기에는 다음 두가지 방법으로 문자열 배열을 만들어 보도록 하겠습니다. 1) string-array 활용.. 기리's Android 이야기 2021. 1. 25.
[Android/Kotlin] 안드로이드 뒤로가기 종료 방지하기 feat. onBackPressed() 뒤로가기 버튼을 눌렀을때 백스택이 없으면 앱이 종료됩니다. 하지만 사용자의 실수로 앱이 종료될 수 있기 때문에 일정 텀을 주는 것이 좋습니다. 그래서 "종료하시려면 뒤로가기 버튼을 한번 더 눌러주세요." 라는 토스트 메시지를 띄워주는 앱이 많습니다. 이러한 토스트 메시지를 띄워주는 방법에 대해서 알아보겠습니다. Step01. 변수선언 private var doubleBackToExit = false Step02. onBackPressed() override fun onBackPressed() { if (doubleBackToExit) { finishAffinity() } else { Toast.makeText(this, "종료하시려면 뒤로가기를 한번 더 눌러주세요.", Toast.LENGTH_SHORT).. 기리's Android 이야기 2021. 1. 23.
[Android/Kotlin] 안드로이드 Single Click 구현하기 feat. 두번 클릭 방지... 오늘은 안드로이드를 개발 할 때 두 번 클릭되는 경우 이를 해결하는 방법에 대해서 알아보겠습니다. 가끔 RecyclerView 아이템을 빠르게 두번 클릭하면 새로운 Activity가 두개 열리는 경우가 있습니다. 또는 버튼을 빠르게 두번 클릭하면 해당 액션이 두번 발생 하기도 합니다. 이를 해결하기 위해서는 클릭할때 시간 제한을 두어야 합니다. 먼저 아래와 같이 OnSingleClickListener 파일을 하나 만들어 줍니다. 처음 클릭시 lastClickTime 변수에 시간을 할당해주고, 두번째 클릭 시 interval 시간보다 그 텀이 짧을 때는 return을 시켜줍니다. [OnSingleClickListner.kt] class OnSingleClickListener( private var inte.. 기리's Android 이야기 2021. 1. 22.
[Android/Error] 안드로이드 Caused by: java.lang.NullPointerException: Missing required view with ID: ~~~~~ ViewBinding을 사용하는 중에 아래와 같은 에러가 발생했습니다. activity 레이아웃 파일에 include 레이아웃이 있었는데 ID가 달라서 발생했던 문제였습니다. 아래와 같이 Id를 iclude_drawer 같게 해주면 해결됩니다. [Activity Layout] [Include Layout] ... 기리's Android 이야기 2021. 1. 21.
[Android/Kotlin] 안드로이드 SharedPreferences 사용하기 이번 시간에는 SharedPreferences를 좀 더 효율적으로 사용하는 방법에 대해서 알아보겠습니다. 안드로이드 개발 시 SharedPrefereces를 활용하여 간단한 상태값을 저장하기도 합니다. 최초 로그인 여부, 현재 로그인 유저의 간단한 정보, 가장 최근에 선택했던 값 등 다양하게 활용할 수 있습니다. 아래예제는 회원정보를 저장하고 조회하는 모습입니다. [build.gradle/app] // Preference implementation 'androidx.preference:preference-ktx:1.1.1' [PreferenceHelper.kt] object PreferenceHelper { fun defaultPrefs(context: Context): SharedPreferences .. 기리's Android 이야기 2021. 1. 20.
[Android/Kotlin] 안드로이드 로또 당첨번호 조회하기(2) 오늘은 회차별 로또 당첨번호를 가져오는 방법에서 대해서 알아보겠습니다. 회차별 로또번호를 조회하기 위해서는 아래 URL를 사용하시면 하시면 됩니다. https://www.dhlottery.co.kr/common.do?method=getLottoNumber&drwNo=946 검색결과 아래와 같이 json 형태로 받아 볼 수 있습니다. {"totSellamnt":99380178000,"returnValue":"success","drwNoDate":"2021-01-16","firstWinamnt":2157656182,"drwtNo6":40,"drwtNo4":30,"firstPrzwnerCo":11,"drwtNo5":34,"bnusNo":20,"firstAccumamnt":23734218002,"drwNo":9.. 기리's Android 이야기 2021. 1. 19.
[Android/Kotlin] 안드로이드 로또 번호 생성하기(1) 랜덤으로 로또 번호를 생성하는 방법입니다. 간단히 설명드리면 로또 번호를 담을 List를 하나 생성합니다. 번호를 랜덤으로 생성하고, List에 담기전에 똑같은 번호가 들어있는지 확인을 해줍니다. List에 담겨져 있다면 continue를 호출하여 반복문을 다시 시작합니다. 반대로 없으면 List에 담아줍니다. 6개 번호가 담겨질때까지 반복합니다. 마지막으로 번호순서대로 정렬하기 위해 sort()를 호출 합니다. [While 사용] fun main(args: Array) { val result = createRandomNumberList() for (i in result.indices) { println("i번째 숫자: ${result[i]}") } } fun createRandomNumberList().. 기리's Android 이야기 2021. 1. 17.
[앱소개/로또앱] 넘버원로또 소개 안드로이드를 공부하면서 개인 프로젝트를 여러개 만들어봤지만, 항상 출시까지는 생각을 안하고 있었습니다. (이런 허접한 앱을 플레이스토어에 남겨도 될까..??) 그래서 그런지 플레이스토어 업로드 하는것부터 그 다음 단계가 어려워 보였고 겁이 났습니다. 하지만 언젠가는 앱 개발자가 되어야 하니 그래도 앱 하나를 출시해 보기로 마음 먹었습니다. 그래서 탄생한 앱이 [넘버원로또]입니다. 플레이스토어에 올리고 운영하는 과정에서 그리고 생각하지 못했던 에러들이 발생했습니다. 갑자기 사용자에게도 미안해지는 감정... 개발도 어려운데 디자인도 해야하니 쉽지 않았고, 마케팅은 또 어떻게 해야 할 지 아직도 모르겠습니다. 그래도 시간은 흘러 오늘까지 왔네요. 처음에는 공부하는 겸 만들어봤지만 점점 더 키워보고 싶은 생각이.. 기리's Android 이야기 2021. 1. 17.
[Android/Java] 안드로이드 ViewPage2 무한 이미지 슬라이딩 구현하기 오늘은 ViewPager2를 이용해서 무한 이미지 슬라이딩을 구현해보도록 하겠습니다. 완성된 모습은 아래와 같습니다. Step01. build.gradle 추가하기 ViewPager2는 material Library에 추가되어 있으므로 material 라이브러리가 추가 되어 있어야합니다. 추가적으로 이미지로딩을 위해 Glide Library를 추가해줍니다. implementation 'com.google.android.material:material:1.2.1' // Glide implementation 'com.github.bumptech.glide:glide:4.11.0' annotationProcessor 'com.github.bumptech.glide:compiler:4.11.0' Step02. .. 기리's Android 이야기 2021. 1. 15.
[Android Studio] 프로젝트/패키지명 변경하기 안드로이드 스튜디오를 통해서 작업을 하다보면 갑자기 프로젝트명을 바꿔야 할 때가 있습니다. 기본세팅인 example에서 작업을 하다가 막상 플레이 스토어야 올려야 할때면 수정을 해줘야 합니다. 이번에는 안드로이드 프로젝트명을 변경하는 방법에 대해서 말씀드리겠습니다. Step01. 디렉토리명 변경 프로젝트 네비게이션 바에서 설정버튼을 누르면 Compat Middle Package 메뉴가 보입니다. 현재는 선택 상태로 패키지명을 기준으로 폴더가 구조화 되어 있습니다. 이를 해제 시켜줍니다. 디렉토리가 해제되면 아래와 같이 폴더 이름을 변경할 수 있습니다. 저는 example과 timertutorial 이 두 곳을 수정했습니다. Rename선택시 Warining이 나타나도 Rename Package 선택하여 .. 기리's Android 이야기 2021. 1. 14.
[Android/Kotlin] 안드로이드 ViewBinding 사용하기 feat. kotlin synthetics deprecated... 안드로이드를 처음 접하실 때 findViewById() 메소드를 사용하여 해당 View에 접근했습니다. 하지만 프로젝트가 커지면 이는 번거로운 작업이 되었고, 또는 NullPointerException의 주범이 되곤 했습니다. 이러한 문제점이 있었기에 이를 해결할 수 있는 버터나이프 등 다양한 라이브러리를 사용했습니다. 하지만 코틀린으로 안드로이드 개발 할 때는 kotlin synthetics 에서 자동으로 위젯을 연결해 주어 해당 라이브러리가 필요 없었습니다. 이제는 'android-kotlin-extensions' (kotlin synthetics, parcelize) 이 Deprecated 되어 최근 안프로이드 스튜디오 버젼에서는 프로젝트 생성시 사용할 수 없습니다. 그래서 이번에는 findView.. 기리's Android 이야기 2021. 1. 12.
[Android/Kotlin] 안드로이드 액티비티 전환 애니메이션 사용하기 시작하기안녕하세요. 기리기리 입니다. 오늘은 안드로이드 액티비티 전환 애니메이션에 대해서 알아볼게욤. 액티비티 이동시 전환 애니메이션을 사용하면 사용자에게 좀 더 시각적으로 어필할 수 있습니다. 이번에는 A -> B  그리고 B -> A 로 액티비티가 전환될 때 애니메이션을 적용해 보도록 하겠습니다. 적용한 모습은 아래와 같습니다. [Slide Left / Slide Right] & [Slide Up / Slide Left]   Anim 파일 만들기Res 폴더에 anim 폴더를 생성해 줍니다.   anim 폴더에 적용될 xml 파일을 생성해 줍니다.액티비티가 왼쪽에서 오른쪽으로 전환되는 애니메이션을 위해서 총 4개의 파일이 필요합니다.같은 방식으로 액티비티가 위에서 아래로 전환되는 애니메이션을 위해서 총.. 기리's Android 이야기 2021. 1. 12.