【问题标题】:Adding an array of views crashes an android app添加视图数组会使 android 应用程序崩溃
【发布时间】: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);
    }
}

【问题讨论】:

    标签: java android view


    【解决方案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;();

      - 始终将class、enum、interface 的第一个字母设为大写。

      例如:

      应该不是page而是Page

      【讨论】:

        猜你喜欢
        • 2011-09-09
        • 2012-07-28
        • 1970-01-01
        • 1970-01-01
        • 2016-07-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多