전체 글 (93) 썸네일형 리스트형 [About] 1.0.0 에서 1.1.0 으로 업그레이드 기념 회고 호주 워홀을 하는 중에 더 이상 미루면 안될 것 같아 냅다 배포를 한 어플, About 처음으로 배포된 어플을 보완하여 버전을 올려서 시장에 내놓았다! 많관부 About - 생각 기록 서비스 - Google Play 앱 하나의 주제, 다양한 생각을 기록하는 서비스 play.google.com 잘한 점 1) 미리 배포를 해놨기에 부족했던 부분에 대해서 수정할 수 있었던 것 같다. 2) 코멘트를 삭제하는 부분에서 ItemTouchHelper 를 통해 구현하였는데, 검색을 해도 원했던 방법이 없었다ㅠ 유튜브에서 우연찮게 원하는 기능을 구현하는 사람을 찾아서 코드를 일단 그대로 옮겨 작성한 후에야 이해했다. 하지만 유튜버가 구현한 방향과 내가 원했던 스와이프 방향이 달랐기 때문에 이해한 내용을 바탕으로 코드를 .. [Android] Parameter specified as non-null is null 문제 상황 java.lang.NullPointerException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkNotNullParameter, parameter think 아이템 삭제 버튼을 클릭하면 NullPointerException 발생 해결 과정 첫번째로 했던 일은 Logcat 을 살펴보면 링크로 ThinkPresenter 의 getThink() 메소드를 가리키길래 거기서 문제가 있나 싶었다. 그런데 삭제를 했는데 getThink() 가 다시 호출이 되나? 싶어서 아래의 사진과 같이 삭제를 했을때의 흐름을 살펴보았다. 예상했던 화면 흐름은 삭제를 마치고 popBackStack() 을 하면 바.. [Android] Room Database 버전 올리기 그런데 오류를 곁들인 .. (Migration didn't properly handle) 버전 관련해서 포스팅했는데 버전을 또 올려?!?! [ 버전 업그레이드 하는 이유 ] 처음에 하나의 테이블(주제)을 만들고 기능을 추가하다보니 또 하나의 테이블(생각)을 만들고 .. 그러다보니 테이블간에 외래 키를 설정해주었어야 하는데 그걸 안해줘서 .. 초기화를 하려고하면 주제 삭제 -> 생각 삭제 -> 코멘트 삭제(또 추가된 테이블) 이렇게 플로우가 되는 것임 .. 일단 주제 삭제 -> 생각 삭제를 진행하면서는 외래 키를 생각해내지 못해서 코드로 작성했었다. override fun deleteAllTopic() { CoroutineScope(Dispatchers.IO).launch { var topicListCount = 0 var thinkListCount = 0 topicRepository.getT.. [Android] EditText 의 데이터 Intent 로 받아오기 [ 문제 상황 ] EditText 를 통해 사용자 입력을 받아 Intent 로 데이터를 넘겨 받아오는 과정에서 getStringExtra()를 사용하면 데이터가 null 이 되는 것을 알게되었다. 이유는 무엇일까? [ 해결 과정 ] 디버깅을 통해 일단 (1) 데이터가 잘 전달되는지 (2) 잘 받아와지는지 확인하였다. 1) 데이터가 잘 전달되는지 확인하기 moveTopicList 는 TopicListFragment 로 데이터를 전달해주는 Intent 객체이다. mExtras 를 확인해보면 Bundle 안에 topic=주제입력 으로 잘 들어가있는 것을 확인할 수 있다. 2) 데이터가 잘 받아와지는지 확인하기 데이터를 받는 화면인 TopicListFragment 에서 디버깅해보면 일단 해당 Intent 의 m.. [Android] MVP 디자인 패턴에서 View 와 Presenter 는 왜 꼭 1:1로 대응되어야 할까? 디자인 패턴을 공부할때면 MVP 패턴에는 항상 View 와 Presenter 가 1:1로 대응되어야 한다고 설명이 되어있는 것을 볼 수 있다. 그런데 왜? 왜 1:1로 대응되어야 하는지, 1:1이 아니면 어떻게 되는지에 대해서는 설명을 잘 보지 못했던 것 같다. 실제로 안드로이드 면접을 봤을 때 이와 관련해서 질문을 하셨었다. MVP는 View 와 Presenter 가 1:1로 대응되어야 한다고 하셨는데, 왜 1:1로 대응되어야 하는걸까요? 1:1로 대응되지 않으면 안되는걸까요? 공부했던대로 MVP는 1:1로 대응되어야합니다~ 라고 대답만 드렸었지 1:1이 되면 안되는 부분에 대해서는 생각해보지 않았기 때문에 답변을 못했었다. 그 이유를 About 프로젝트를 하면서 조금은 알 것 같았다. about 프로.. [Android] Room Database 마이그레이션 도오전 2개의 테이블만 가지고 있던 나 ... 나의 조그만 데이터베이스 .. 그런데 1개의 테이블을 더 추가해야하는데 추가하려면 데이터베이스 마이그레이션을 해야한다고 한다! 그럼 레쯔고 ...! 참고한 사이트는 공식문서에 있는 Room 데이터베이스 이전 관련 내용 Room 데이터베이스 이전 | Android 개발자 | Android Developers Room 라이브러리를 사용하여 데이터베이스를 안전하게 이전하는 방법 알아보기 developer.android.com 첫번째 시도 : 자동 이전 말이 자동이전 .. 너무 쉬울 것 같았고 추가해줘야 할 것들도 얼마 없었다 @Database( version = 2, entities = [User::class], autoMigrations = [ AutoMigration.. [Kotlin] Scope Functions (let/run/with/apply/also) 헷갈리기만 했던 scope 함수들 정리해보자 -! apply public inline fun T.apply(block: T.() -> Unit): T { contract { callsInPlace(block, InvocationKind.EXACTLY_ONCE) } block() return this } Object 를 수신자(Receiver)로 사용가능하며, this 로 접근 가능 Object 반환 사용하는 경우 주로 객체 초기화 및 속성 설정을 한 번에 수행할 때 사용 also public inline fun T.also(block: (T) -> Unit): T { contract { callsInPlace(block, InvocationKind.EXACTLY_ONCE) } block(this) ret.. [Android] SupportFragmentManager 파도타기 Fragment의 BackStack 과정에 대해 알아보다가 supportFragmentManager는 어떤 과정으로 사용이되는거지...? 싶어서 알아본 supportFragmentManager 일단 Fragment를 사용하다보면 supportFragmentManager.beginTransaction() 위와 같은 코드를 굉장히 많이 사용했는데 어떻게 FragmentManager가 동작하는지 알고싶었음.. [0] SupportFragmentManager Activity와 관련있는 (Activity 위에서 사용 될) Fragment를 위해 상호작용을 목적으로 하는 FragmentManager를 생성한 후 조작을 가능케하는 역할을 함! [1] supportFragmentManager /* FragmentAct.. 이전 1 2 3 4 5 6 7 ··· 12 다음