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

얼럿다이얼로그 널 에러로 앱 죽는 현상

0 추천
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setMessage("삭제되었습니다.")
     .setPositiveButton("확인", null)
     .show();

 

프래그먼트에서 상기 얼럿다이얼로그로 메세지를 띄우는데요,

같은 프래그먼트내에 저 코드로 다른 메세지는 잘 출력 되는데

이건 그대로 복사해서 가져와서 메세지부분만 수정헀는데

널 에러가 뜨네요..

검색해보니 관련 문제를 겪는 케이스가 좀 있던데

해결법으로 제시되서 채택까지 된게 위에 제가 올린 코드거든요,

액티비티 잡아주는 부분이 보통 문제던데

getActivity()  를 넣으라는게 보통의 채택된 해결법이었고,

저는 이게 널 에러가 나서 (될때도 있고 한데 에러나는 비중이 더 높네요)

((MainActivity)getActivity()) 이렇게도 줘보고 해도

위쪽의 다른 얼럿다이얼로그는 정상출력이 되는데

밑에 이부분에서는 널에러가 잡힙니다

이 부분이 if 에 들어가있어서 수행되지 않고 지나갈때

토스트 띄우는게 있는데 그부분도 액티비티 잡는쪽 널에러로 뻗을때가 있더라고요

 

분명 되는코드이고 될때도 있고 안될때도 있으니 원인을 못찾겠습니다,

다이얼로그랑 토스트가 너무 많으면 액티를 못잡아서 널이 뜰때도 있는걸까요..?

파르네제 (2,030 포인트) 님이 2018년 3월 20일 질문
에러 로그를 올리세요.

1개의 답변

0 추천
 
채택된 답변
얼럿다이얼로그를 띄우는 동시에 프레그먼트를 종료하는거 아닌가요?

getActivity()를 호출할때 프로그먼트가 종료되기 전이면 노출이 되는거고

종료된 후 이면 getActivity()를 null로 반환 하는거로 보입니다.

AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());

builder.setMessage("삭제되었습니다.")

     .setPositiveButton("확인", "프레그먼트 종료 처리")

     .show();

하시던가

별도로 프레그먼트가 생성될때 Activity관련 변수를 별도로 저장하셔야 될거 같습니다.

아니면 얼럿다이얼로그를 보여지는 위치를 프레그먼트가 종료되고 보여지는 프레그먼트나 화면에서 처리해야 될거 같네요.
익명사용자 님이 2018년 3월 20일 답변
파르네제님이 2018년 3월 24일 채택됨
이 다이얼로그에서 별도의 액션을 취할건 아니고 그냥 안내멘트만 보여주고 확인눌러서 닫을 뿐인건데요, 그럼 코드 수정으로 언급해주신 "프래그먼트 종료 처리" 부분에는 어떤 값을 넣어주는게 좋을까요?
현재 다이얼로그느 다이얼로그대로 보여주고 프래그먼트를 종료 하고 있는걸로 보입니다
프래그먼크를 종료 하고 있는 부분을 찾아서 위치를 수정해야 한다고 알려드린겁니다
...