2011-04-26 5 views
2

안녕 모두 나는 arraylist와 활동의 배열을 가지고 있으며 두 가지 기능을 가지고 있습니다. 나는 arraylist 선언하고 활동에 배열하고 기능에 사용됩니다. 하지만 난 두 번째 기능에서 그 변수에 액세스 할 수 없습니다. 두 기능 모두 동일한 활동에 있습니다. 두 번째 함수에서 Logcat에서 NullPointerException을 발생시킵니다. 코드 :android의 가변 범위 문제

public class testapplication extends Activity { 
ArrayList<String> getdatabase = new ArrayList<String>(); 
public String[] array; 
protected void onStart() { 
     getdatabase.add("1"); 
     getdatabase.add("2"); 
     array=new String[getdatabase.size()]; 
     getdatabase.toArray(array); 
     Log.e("app",""+array.length()); // print as app 2 

    } 

public void onCreate(Bundle savedInstanceState) { 

Log.e("app",""+array.length()); // NullPointerException. 
} 

} 

도와주세요.

+0

onCreate를 실행하기 전에 onStart가 실행되고 있습니까? – npinti

+0

Activity 라이프 사이클에 따라 onCreate가 onStart보다 먼저 호출되므로 onStart()가 아니라 onCreate에서 코드를 수행하고 onStart()에서 수행하는 특별한 이유를 알고 싶습니다. –

답변

0

onStart()가 onCreate() 다음에 호출되므로 배열이 아직 만들어지지 않습니다. here을 참조하십시오.

3

문제는 onCreate()가 Activity가 시작될 때 처음 호출되는 메서드입니다. 이 시점에서 아직 변수 배열을 초기화하지 않았습니다. 그래서 NullPointerException이 발생합니다. 어레이에 액세스하기 전에

array=new String[getdatabase.size()]; 

:

당신이 전화 것을 보장해야하는 문제를 해결합니다.

coder_tim은 documentation에서 onCreate()가 항상 onStart() 전에 호출된다는 것을 분명히 알 수 있습니다.

+1

동의 : http : /developer.android.com/reference/android/app/Activity.html –

+0

좋은 링크를 통해 onStart는 항상 onCreate 후에 호출된다는 것을 알 수 있습니다. – RoflcoptrException

0

Android 활동 라이프 사이클을 참조하면 onCreate가 onStart보다 먼저 호출되므로 NullPointerException이 발생합니다. 게다가 머리가 위로 향하게됩니다. 오버라이드 한 메소드 어딘가에서 super.onCreate와 super.onStart를 호출해야합니다.