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

컨텍스트가 메소드 안에서 호출되는 시점에 null이 됩니다...

0 추천

일단 흐름은

1. onAttach()에서 받아온 컨택스트를 전역변수 mContext에 저장. 이때 까지는 null이 아닙니다.

2. public static void refreshSpinner() 호출.  여기서 public void setSpinner(ArrayList al) 호출

3. public void setSpinner(ArrayList al) 호출됨. 여기서 mContext를 체크하면 null이 됩니다.

 

/*  MyActivity.java  */

private Context mContext;

    @Override
    public void onAttach(Context ctx){
        super.onAttach(ctx);
        mContext = ctx;
       //mContext와 ctx는 null이 아님
    }

public static void refreshSpinner(){
    File[] f = new File("경로...").listFiles();
    ArrayList l = new ArrayList();
    for(File a : f){
        l.add(a.getAbsolutePath());
    }
    new MyActivity().setSpinner(l);
}

public void setSpinner(ArrayList al){
   //여기서 체크시 mContext가 null로 찍힘
            ArrayAdapter<String> adapter = new ArrayAdapter<String>(getContext(), android.R.layout.simple_spinner_dropdown_item, al);
            spinner.setAdapter(adapter);
            spinner.setSelection(0);
}

이게 뭐가 어떻게 된 상황인가요?

분명 null이 아니었던게 메소드 내에서만 null이 되네요...

edisondl (1,210 포인트) 님이 2019년 12월 29일 질문

1개의 답변

0 추천
 
채택된 답변
음... 최초 MyActivity가 선언되고 mContext에 값은 제대로 불러온 상태에서

 new MyActivity().setSpinner(l); 하면 다른 메모리가 생성되서 mContext가 null이 된 상태 같네요

refreshSpinner()메소드의 static를 지우고

new MyActivity().setSpinner(I); -> setSpinner(I) 로 바꿔보세요
Tonze (520 포인트) 님이 2019년 12월 31일 답변
edisondl님이 1월 2일 채택됨
...