#java #android
#java #Android
Вопрос:
привет всем, у меня есть arraylist и array в activity и есть две функции. я объявил arraylist и array в activity и использовал в функции. но я не могу получить доступ к этим переменным во второй функции. обе функции находятся в одной и той же активности. во второй функции выдает исключение NullPointerException в Logcat. код:
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.
}
}
пожалуйста, помогите мне.
Комментарии:
1. Вы уверены, что OnStart выполняется перед onCreate?
2. Согласно жизненному циклу Activity,onCreate вызывается перед OnStart, поэтому вы выполняете код в onCreate, а не в OnStart(), и я хочу знать какую-либо конкретную причину для выполнения этого в OnStart ()
Ответ №1:
Проблема в том, что onCreate() — это метод, который вызывается первым при запуске вашей активности. На данный момент вы еще не инициализировали свой массив переменных. Вот почему вы получаете исключение NullPointerException.
Чтобы решить проблему, вы должны убедиться, что вы вызываете это:
array=new String[getdatabase.size()];
прежде чем пытаться получить доступ к массиву.
Как указал coder_tim, в документации вы можете ясно видеть, что onCreate() всегда вызывается перед OnStart().
Комментарии:
1. Согласен, проверьте это: developer.android.com/reference/android/app/Activity.html
2. Хорошая ссылка, там вы можете видеть, что OnStart всегда вызывается после onCreate.
Ответ №2:
OnStart() вызывается после onCreate(), поэтому массив еще не создан. Смотрите здесь.
Ответ №3:
Ссылаясь на жизненный цикл активности Android, onCreate вызывается перед OnStart , вот почему вы получили исключение NullPointerException, кроме того, просто предупреждаю. Вы должны вызвать super.onCreate и super.OnStart где-нибудь в переопределенных вами методах.