在onCreate中可能导致这个NPE的原因是什么?

时间:2013-11-07 22:21:40

标签: android nullpointerexception oncreate

我在以下文件的onCreate中获取了一个NPE(MySubActivity):

public class MySubActivity extends MySuperActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        myTextView.setText(getResources().getString(R.string.myString));
    }
}

MySuperActivity:

public class MySuperActivity extends Activity {
    protected TextView myTextView;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.my_layout);

        myTextView = (TextView)findViewById(R.id.myTextViewid);
    }
}

奇怪的是,我在测试应用时从未见过这种崩溃。我测试时页面工作正常。但是我得到了谷歌的崩溃报告,通知我崩溃。我无法重现它,我不知道在什么情况下这种崩溃可能发生。看到它对我有用,资源ID和字符串名称等必须正确。

我唯一想到的是,用户可能将手机设置为不同的语言,因此无法正确提取资源。但是,所有这些都有默认资源,我测试了更改模拟器的语言并且没有崩溃。有什么想法吗?

1 个答案:

答案 0 :(得分:-1)

在另一种方法中设置您的视图,如下所示:

public class MySubActivity extends MySuperActivity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    private void setView(){
        myTextView.setText(getResources().getString(R.string.myString));
    }
}

编辑:不要在MySuperActivity

中调用setView()
public class MySuperActivity extends Activity {
    protected TextView myTextView;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.my_layout);

        myTextView = (TextView)findViewById(R.id.myTextViewid);
        // Or, you can do this in a method called getView() if you like
    }
}