junsuk5/kotlin-android

13장 TodoList NPE 질문

Closed this issue · 3 comments

안녕하세요,

최신으로 업데이트된 코드를 복붙하여 TodoList를 실행하면 항상 다음과 같은 오류가 뜹니다.

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void com.google.android.material.floatingactionbutton.FloatingActionButton.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
at com.example.todolist.EditActivity.insertMode(EditActivity.kt:47)
at com.example.todolist.EditActivity.onCreate(EditActivity.kt:28)

찾아보면 제일 처음 메인화면에서 id가 fab인 FloatingActionButton( 즉, + 버튼) 이 계속 null로 되는 것 같은데, 등록이나 초기화 같은 게 잘 안 이루어 진 듯하나 코드를 그대로 따라 넣은거라 몇 번을 확인해봐도 잘 안 됩니다.
해결할 방법이 있나요? 프로젝트 구조나 버전, Manifest, xml layout 등 설정해야 할 건 다 했는데 왜 안되는지 잘 모르겠네요.

제보 감사합니다.
해당 이슈는 Realm 버전을 업데이트해서 해결이 되었습니다.

프로젝트 수준의 build.gradle에 버전을 5.12.0 에서 7.0.0 으로 올리면 해결됩니다.
classpath "io.realm:realm-gradle-plugin:7.0.0"

변경사항은 반영해 두었습니다.

안녕하세요, 기존에는 6.0.0 버전이었고 7로 버전을 바꾸는 것으로는 해결이 안 되는 것 같습니다...

챕터 13을 열었을 때 바로 종료되는 이슈가 아니었군요.
기존 소스는 Realm 버전 때문에 바로 종료가 되었고 6.0.0 이후로 해결된 듯 합니다.
이 문제는 해결되었습니다.

하지만 정말 NPE 문제로 질문 주신 거였네요.
소스 코드를 잘 확인해 보셔야 할 듯 합니다.
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/fab"

https://github.com/junsuk5/kotlin-android/blob/master/Chapter13/app/src/main/java/com/example/todolist/MainActivity.kt

코틀린 익스텐션이 알아서 임포트를 해 주기 때문에 임포트문이 잘못 되어 있는지도 확인해야 할 것 같고요.
import kotlinx.android.synthetic.main.activity_main.*
import kotlinx.android.synthetic.main.content_main.*