2016-03-26 4 views
0

Ich erhalte diesen Fehler, wenn ich versuche, meinen Code auszuführen. (Um es einfach für Sie, dass ich die meisten anderen Linien übersprungen, um zu sehen, die nicht meine Codezeile erwähnt)Wo sollte ich Klassen in Android Studio instanziieren?

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) 

Wie Sie Fehler auftritt Linie sehen 71 von onCreate Funktion, wo ich versuche, meine zu instanziiert Klassen wie Fehler in anderen Fragen auf dieser Website genannt. Hier ist der Code (Der Grund, warum ich erklärte außen Ich brauche diese Klassen in vielen anderen Funktionen und Aktivitäten)

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; 

Hier ist der Code der Klasse Fehler. Der Grund für Serializable ist, dass ich es an andere Aktivitäten weitergeben muss.

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

Ich habe versucht, alle Möglichkeiten folgenden Link und mehrere andere enthalten, aber keine Lösung gefunden

NullPointerException when Creating an Array of objects

So sind meine Fragen

  1. Kann ich erklären, ein Array außerhalb der Klasse, während es in OnCreate-Funktion instanziiert wird?
  2. Gibt es andere Fehler als die Array-Deklaration, die einen solchen Fehler verursachen könnten? Mit anderen Worten, können andere Teile des Codes diesen Fehler verursachen?
  3. Da gibt es keine Hauptfunktion, wo sollte ich Variablen wie diese deklarieren und instanziieren?
  4. Seit ich Android Studio für 4 Tage bis jetzt gelernt habe, von Youtube Videos, bin ich immer noch nicht sicher mit Java und Android (weil nur objektorientierte Sprache, die ich weiß, C++ ist). Wenn es Ihnen nichts ausmacht, können Sie bitte ein Buch über die Entwicklung von Android-Anwendungen vorschlagen, die mir systematisches Wissen vermitteln kann? Und danke, dass du deine Zeit in meinem Chaos verbracht hast.

Antwort

1

Es gibt ein offensichtliches Problem hier. Sie greifen auf ein Element mit Index 14 in einem Array der Größe 14 zu. Arrays sind nullbasiert, daher gibt es kein Element mit Index 14. Die 14 Elemente sind von 0 bis 13 indiziert. Es ist einfacher, die length-Eigenschaft von Array, um sicherzustellen, dass die Schleife immer in Grenzen ist:

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

Sie haben meinen Tag, hoffe Ihnen gleich –

Verwandte Themen