2011-04-26 108 views
2

嗨全部 我有一个arraylist和一个活动中的数组,并有两个函数。我将arraylist和array声明为activity,并在函数中使用。但我不能在第二个函数中访问这些变量。两个功能都在同一个活动中。在第二个函数中给出了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

您确定onStart在onCreate之前运行吗? – npinti 2011-04-26 07:15:47

+0

根据Activity的生命周期,在onStart之前调用onCreate,所以你在onCreate而不是onStart()中执行代码,我想知道在onStart() – 2011-04-26 08:34:19

回答

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 – 2011-04-26 07:16:06

+0

好的链接,你可以看到onStart总是在onCreate之后被调用。 – RoflcoptrException 2011-04-26 07:17:29

0

引用到Android活动生命周期,onCreate在onStart之前被调用,这就是为什么你得到空指针异常 此外,只是一个头。你应该调用super.onCreate和super.onStart在你被覆盖的方法的某个地方。