我应该在哪里实例化Android Studio中的Class数组?

时间:2016-03-26 14:20:39

标签: android arrays class nullpointerexception

当我尝试运行代码时出现此错误。 (为了方便你看到我跳过了大部分未提及我的代码行的其他行)

03-26 22:23:51.800 2425-2425/? E/RCPManagerService:  PackageReceiver onReceive() Failed to load meta-data, NullPointer: null
03-26 22:23:53.950 15700-15700/? E/AndroidRuntime: FATAL EXCEPTION: main
                                               Process: com.example.bilguun.pengling2, PID: 15700
                                               java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.bilguun.pengling2/com.example.bilguun.pengling2.MainActivity}: java.lang.NullPointerException
                                                   at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2436)
                                                   at at com.example.bilguun.pengling2.MainActivity.onCreate(MainActivity.java:71)

正如你所看到的那样,在onCreate函数的第71行出现错误,我试图在我的网站的其他问题中实例化我称为Fault的类。这是代码(我在外面声明的原因是我在许多其他函数和活动中需要这些类)

protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Faults=new Fault[14];
    for(int i=0;i<15;i++){
        Faults[i]=new Fault("Unknown");
    }
}
Fault[] Faults;

这是类Fault的代码。 Serializable的原因是,我需要将它传递给其他活动。

 class Fault implements Serializable{
    public String fault_name="Not known";
    public int L_number=0,T_number=0;
    public String path="b";
    public Fault(String name){
        this.fault_name=name;
    }
}

我已经尝试了一些可能的方法,包括链接和其他多个,但没有找到解决方案

NullPointerException when Creating an Array of objects

所以我的问题是

  1. 我可以在类之外声明一个数组,同时在OnCreate函数中实例化它吗?
  2. 除了数组声明之外是否还有其他错误可能会导致此类错误。换句话说,代码的其他部分可能会导致此错误吗?
  3. 由于没有主要功能,我应该在哪里声明和实例化这些变量?
  4. 由于我到目前为止已经学习Android Studio 4天,从Youtube视频开始,我对Java和Android仍然没有信心(因为我只知道面向对象的语言是C ++)。如果您不介意,可以请您推荐一本关于Android应用程序开发的书,它可以给我系统的知识吗?谢谢你把时间花在我的烂摊子上。

1 个答案:

答案 0 :(得分:1)

这里有一个明显的问题。您在大小为14的数组中访问索引为14的元素。数组是从零开始的,因此没有索引为14的元素.14个元素的索引编号为0到13.它更容易使用数组的length属性来确保循环始终在bounds中:

Faults=new Fault[14];
for(int i=0; i < Faults.length; i++){
    Faults[i]=new Fault("Unknown");
}