마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안녕하세요 Room data를 불러오기 전에 참조하여 NPE... 해결

0 추천

안녕하세요

안드로이드촙오자입니다.

제가 현재 달력과 해당하는 달력의 이벤트들을 저장하는 공부를 하고 있습니다.

이벤트들은 Room을 사용해서 내부저장소에 저장하고 있는데요.

달력에 dayBinder를 뿌려줄때 그 날 몇 개의 이벤트가 있는지 보여주려면

Room에서 데이터를 불러와야하는데 다 불러오기전에 dayBinder에서 객체를 참조해서

NullPointerError가 나는것 같습니다.

혹시, 좋은 해결방안이나 비슷한 문제를 경험하신 선생님들의 조언과 방향을 여쭙니다...

1. Fragment의 전역변수, mapByDate

class Example5Fragment : Fragment() {
...
    private lateinit var mapByDate: HashMap<String, MutableList<EventData>>
...
}

2. 해당 Fragment가 attach되어 있는 Activity의 뷰모델을 통해 mapBydate 객체 생성 

- fragment의 onCreate에서 mapByDate 초기화

 

3. 이후 Calendar의 dayBinder에서

mapByDate 사용하면, NPE 발생...

짧은 생각으로는 Utils.kt 클래스를 이용해서 내부저장소의 데이터를 미리 불러와서

전역변수에 할당할 수 있는 방법이 있는지 여쭙고 싶습니다.

감사합니다!!

안드로이드촙오자 (340 포인트) 님이 2021년 7월 11일 질문
해당 Fragment가 attach되어 있는 Activity의 뷰모델을 통해 mapBydate 객체 생성
-> Fragment 가  자체적으로 ViewModel를 가지지 않고 Activity의 ViewModel을 공유하는 이유가 있나요?
Example5Fragment에 ViewModel을 두고 이 ViewModel에서  DAO를 통해 RoomDB에 접근할 수 없는 구조인가요?
위에 말씀드린 Fragment가
메인 액티비티의 BottomNavigationView에 붙어있는 fragment 중의 하나라서
MainActivity에서 ViewModel을 생성해서 공유했었습니다ㅠㅠ
제가 알고 싶은 것은 왜 꼭 MainActivity의 ViewModel을 공유하느냐 하는 것이죠. ViewModel은 뷰에 필요한 데이터를 가공하는 역할을 하는 클래스인데, MainActivity와 Fragment는 분명히 가진 뷰가 다른 클래스들이잖아요?
아...!!!
와 말씀을 해주신 부분이 머리를 울리네요!! 한 번 말씀해주신대로
fragment만의 뷰모델로 구조를 짜보겠습니다!
항상 감사합니다!!

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...