为什么这不起作用 - Android - onCreate()

时间:2010-07-28 12:46:03

标签: android initialization android-activity

以下代码不起作用,并抛出由NullPointerException引起的RuntimeException

public class ListFilteredActivity extends Activity {
    LinearLayout typeSelector = new LinearLayout(this) ;

    @Override
    public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         ScrollView sv = new ScrollView(this);
         this.setContentView(sv);
         //this.typeSelector = new LinearLayout(this);
         this.typeSelector.setOrientation(LinearLayout.VERTICAL);
         sv.addView(this.typeSelector);
     }

当我在onCreate()中移动this.typeSelection的初始化时,效果很好。

    @Override
    public void onCreate(Bundle savedInstanceState) {
       ...
       this.typeSelector = new LinearLayout(this);
       ...
    }

为什么空指针错误?第一段代码中的内联声明在调用构造函数后立即发生,然后onCreate()可以访问该对象,不是吗?

1 个答案:

答案 0 :(得分:3)

LinearLayout要求您传递Context。这是一个Android生命周期对象,而不是Java对象。直接声明和初始化字段时,将使用Java默认构造函数初始化该字段。但是,只有在onCreate生命周期方法发生时才会获得上下文,这是Android,而不是Java的一部分。因此,当您使用this调用LinearLayout构造函数时,Android期望引用一个Context,您只能在调用onCreate之后获得。