添加视图数组会使 android 应用程序崩溃

Posted

技术标签:

【中文标题】添加视图数组会使 android 应用程序崩溃【英文标题】:Adding an array of views crashes an android app 【发布时间】:2012-10-21 01:18:52 【问题描述】:

我这里有一个 android 应用程序的某些部分无缘无故崩溃。

RL0 恰好是一些在 XML 中定义的 LinearLayout,它已经包含了一些其他不相关的东西。老实说,我大部分时间都在使用 C++,所以我最初可能不太了解为什么有些事情在 android 中做的有很大不同,但我正在努力。有关如何修复该崩溃的任何帮助? 错误消息指出 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);
    

【问题讨论】:

【参考方案1】:

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];

【讨论】:

【参考方案2】:

-您已声明Array,但没有初始化它。

例如:

page[] pages = new page[10]; // Tell that this is an Array of page of length 10

-需要初始化它,

例如:

for (page p : pages)

       p = new page();

   

-请使用Collection,比如ArrayList,而不是Array,因为它比使用数组灵活得多。

- ArrayList 可以保存null 值,而 Array 不同,它的大小可以增加

ArrayList&lt;page&gt; p = new ArrayList&lt;page&gt;();

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

例如:

应该不是page而是Page

【讨论】:

以上是关于添加视图数组会使 android 应用程序崩溃的主要内容,如果未能解决你的问题,请参考以下文章

快速在表格视图中插入新行时应用程序崩溃?

搜索后重新加载视图会使应用程序崩溃

从表视图中删除数据会使应用程序崩溃

更改为横向会使我的 Android 应用程序崩溃

使用 NSUserDefaults 保存数组会使应用程序崩溃

释放数组会使应用程序在 xCode 中崩溃