添加一个视图数组会导致安卓应用崩溃

3

我这里有一个安卓应用程序的部分,它会无缘无故地崩溃。

RL0 是在 XML 中定义的某个 LinearLayout,其中已经包含了一些其他不相关的内容。说实话,我主要是在 C++ 方面工作,所以可能一开始对为什么在安卓中有一些显著不同的做法并不了解,但我正在努力学习。请问有什么帮助可以让我修复这个崩溃?错误信息显示NullPointerException。谢谢。

public class Osteoporoza extends Activity {
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_osteoporoza);
        LinearLayout RL0=(LinearLayout)findViewById(R.id.RL0);        

        page[] pages=new page[10];
        RL0.addView(pages[0].pageLL0);//doesn't crash without this line, yet i need to have some way of adding n objects that follow a pattern, i.e. a class.

class page
{
    public LinearLayout pageLL0;
        public ScrollView pageUpperScroll1;
            public TextView pageTextView2;
        public ScrollView pageLowerScroll1;
            public LinearLayout pageAnswerButtonLL2;
                public Button AnswerButton3_1;
                public Button AnswerButton3_2;
                public Button AnswerButton3_3;
                public Button AnswerButton3_4;

    page()
    {
        pageAnswerButtonLL2.addView(AnswerButton3_1);
        pageAnswerButtonLL2.addView(AnswerButton3_2);
        pageAnswerButtonLL2.addView(AnswerButton3_3);
        pageAnswerButtonLL2.addView(AnswerButton3_4);

        pageLowerScroll1.addView(pageAnswerButtonLL2);
        pageUpperScroll1.addView(pageTextView2);

        pageLL0.addView(pageUpperScroll1);
        pageLL0.addView(pageLowerScroll1);
    }
}
2个回答

4

Object数组中的所有元素默认都是null

也就是说,当您创建该数组时:

page[] pages = new page[10];

你现在只是设置了数组的大小,但是没有设置数组内部的任何实例,因此每个元素都将是null。要实例化每个元素,你需要使用:

for (int i=0; i < pages.length; i++) {
   pages[i] = new page();
}

注意Java命名规范表明类名以大写字母开头,例如:
Page[] pages = new Page[10];

0

- 您已经 声明Array,但是尚未初始化

例如:

page[] pages = new page[10]; // 告诉它这是一个长度为10的页面数组

-需要初始化它,

例如:

for (page p : pages){

       p = new page();

   }

- 请使用像ArrayList这样的Collection,而不是Array,因为它比使用数组更加灵活。

- ArrayList可以容纳null值,并且与Array不同,其大小可以增加

ArrayList<page> p = new ArrayList<page>();

- 始终将classenuminterface第一个字母大写。

例如:

应该是Page而不是page


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接