브레이크포인트가 안 잡히나요? 그럼 라인 바이 라인 실행하는거 시도해 보시고 그래도 안 되면 break on all exception 해 주세요. 여러 곳에서 검색해 봤을때는 NPE가 맞는 거 같습니다. 아니면 android studio가 액티비티 resource 파일이랑 매핑하는 부분이 버그가 꽤나 있으니 리빌드하도록 해당 캐시 날려보시는 것도…
아이고... 저렇게 짜시면 안 됩니다. 코드를 올려드릴 순 없으니 해결책의 핵심만 알려 드리자면, onCreate 안에 선언된 함수들을 전부 다 class scope로 꺼내 주시고, try catch 블록은 calc 함수 안에 구현하시는 겁니다. 기존에 안 되신 이유는 try catch 블록이 단지 anonymous function을 뷰에 bind 해 주는 과정까지에서 발생하는 오류들만 catch 해 주기 때문입니다. 이후 해당 익명항수들이 실행될 때는 try catch 블록은 이미 완전히 종료된 상태이니 해당 lambda 함수들과 독립적으로 실행되고, 따라서 예외들이 catch 되지 않습니다. android의 view component 들이 정의하는 lifecycle에 대한 이해 부족과 exception handling lifecycle에 대한 이해부족이 원인이었던 듯 하네요.
참고로 저는 android studio에서 디버거 잘 동작하였습니다. 잘 찾아보고 디버거에 익숙해지면 더 편한 개발이 가능하실 것 같습니다!
네 맞습니다. 일단 이전의 코드에서 동작 자체가 안 되던 핵심 문제는 try catch의 스코프가 이상하다는 거고 사실은 이 문제만 해결되어도 아마 동작 자체에는 문제가 없을 겁니다. 하지만 onCreate는 보통 어떤 뷰 컴포넌트가 정상적으로 동작하는 데 쓰이는 초기화 작업들이 진행되는 곳인데, 초기화 과정이서만 필요한 작업이라면 모를까 앞으로 계속 쓰이는 로직을 굳이 closure로 바인딩하는 것은 직관성이 낮습니다. 또한 symbol binding이 이후로 의도되지 않은 방향으로 동작할수도 있으니까요(새로운 로직이 추가되면서). 기능의 원 설계 의도 및 직관성과 프로젝트 관리의 측면에서는 말씀드린 방향이 맞다고 생각합니다.