Android (65) 썸네일형 리스트형 Coroutine + LiveData 를 통해 데이터 전달받기 그런데 이전 데이터도 전달되는 .. 문제 상황 첫번째, dp 알고리즘 클릭 >> 두번째, 그래프 이론 알고리즘을 클릭하면 이전에 선택한 dp 관련 문제들이 로그에 찍히고 그 이후에 그래프 이론 알고리즘 관련 문제들이 로그에 찍히는 것을 알 수 있다. 다른 알고리즘을 클릭하고 문제를 보고를 반복하다보면 exception 이 발생하는 문제를 마주하게 되었다. 문제 해결 과정 1️⃣ ViewModel 에서 LiveData 에 값을 세팅하는 과정을 확인 네트워크 통신을 통해 가져온 데이터를 가공해서 _problems.value 를 통해 값을 세팅해주었다. 하지만 그런데도 이전 값과 + 최신 값이 로그에 똑같이 찍혔다. 무엇을 확인해봐야 하는지 감이 잡히지 않아서 챗GPT 에게 물어봤고, 하나씩 확인해보기로 했다. 2️⃣ Observer 등록 여부.. URL 에 콜론(:), 더하기(+)와 같은 문자가 포함되었을 때 이번 문제는 랜덤리즘 프로젝트를 진행하다가 발생한 문제 .. 문제상황 서버에 문자열 관련한 문제들을 받기 위해서 Request로 solvable:true+tag:strings 의 쿼리를 전송했는데, 계속해서 원하는 값을 받을 수 없었다. 예상한 응답 실제로 받은 응답 2220 개의 문제 개수와 첫 문제가 1013번 이어야함 2220개가 아닌 전체 총 문제의 개수(29031개)와 가장 첫 문제인 1000번부터 전달받음 문제 해결 과정 가장 먼저 의심되었던 부분은 주소에 : , + 와 같은 문자가 포함되어있었는데 무슨 뜻인지 알지못해서 아래와 같이 그냥 하나의 문자열로 전달했다. val requestQuery = "solvable:true+tag:$tagKey" 이 부분이 문제인걸까? 싶었는데 쿼리로 어떻게.. [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.. 이전 1 2 3 4 5 6 ··· 9 다음