2016-08-22 32 views
0

so schrieb ich gerade diese Zeilen Code:Warum erhalte ich diesen Fehler, wenn ich meine App starte?

package com.example.android.stimmenauswerter; 

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.TextView; 


public class MainActivity extends AppCompatActivity { 

    int nein = 0; 
    int ja = 0; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
    } 

    final TextView ergebnis =(TextView) findViewById(R.id.ergebnis); 

    public void japluseins (View view) 
    { 
     ja++; 
    } 

    public void neinpluseins (View view) 
    { 
     nein++; 
    } 

    public void result (View view) 
    { 

     if(ja > nein) 
     { 
      ergebnis.setText(ja + " JA" + " vs " + nein + " NEIN" + "\nSomit hat JA gewonnen!"); 
     } 
     else if(nein>ja) 
     { 
      ergebnis.setText(ja + " JA" + " vs " + nein + " NEIN" + "\nSomit hat NEIN gewonnen!"); 
     } 
     else 
     { 
      ergebnis.setText(ja + " JA" + " vs " + nein + " NEIN" + "\nDas sieht mir nach einem Unentschieden aus!"); 
     } 
    } 
} 

Grundsätzlich ist die App, die Zeiten zählen sollten Sie Ja oder Nein und am Ende ausdrucken die Zahlen drücken. Ich denke, der Code würde genau das tun, was ich will es tun, aber wenn ich die app führen Sie es, dass die Fehlernachricht Ausdrucken Abstürze:

08-22 16:26:20.834 10574-10574/com.example.android.stimmenauswerter E/AndroidRuntime: FATAL EXCEPTION: main 
                         Process: com.example.android.stimmenauswerter, PID: 10574 
                         java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.android.stimmenauswerter/com.example.android.stimmenauswerter.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.Window$Callback android.view.Window.getCallback()' on a null object reference 
                          at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3093) 
                          at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3349) 
                          at android.app.ActivityThread.access$1100(ActivityThread.java:221) 
                          at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1794) 
                          at android.os.Handler.dispatchMessage(Handler.java:102) 
                          at android.os.Looper.loop(Looper.java:158) 
                          at android.app.ActivityThread.main(ActivityThread.java:7225) 
                          at java.lang.reflect.Method.invoke(Native Method) 
                          at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 
                          at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 
                         Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.Window$Callback android.view.Window.getCallback()' on a null object reference 
                          at android.support.v7.app.AppCompatDelegateImplBase.<init>(AppCompatDelegateImplBase.java:72) 
                          at android.support.v7.app.AppCompatDelegateImplV7.<init>(AppCompatDelegateImplV7.java:146) 
                          at android.support.v7.app.AppCompatDelegateImplV11.<init>(AppCompatDelegateImplV11.java:28) 
                          at android.support.v7.app.AppCompatDelegateImplV14.<init>(AppCompatDelegateImplV14.java:41) 
                          at android.support.v7.app.AppCompatDelegateImplV23.<init>(AppCompatDelegateImplV23.java:29) 
                          at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:191) 
                          at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:173) 
                          at android.support.v7.app.AppCompatActivity.getDelegate(AppCompatActivity.java:511) 
                          at android.support.v7.app.AppCompatActivity.findViewById(AppCompatActivity.java:183) 
                          at com.example.android.stimmenauswerter.MainActivity.<init>(MainActivity.java:21) 
                          at java.lang.Class.newInstance(Native Method) 
                          at android.app.Instrumentation.newActivity(Instrumentation.java:1095) 
                          at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3083) 
                          at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3349)  
                          at android.app.ActivityThread.access$1100(ActivityThread.java:221)  
                          at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1794)  
                          at android.os.Handler.dispatchMessage(Handler.java:102)  
                          at android.os.Looper.loop(Looper.java:158)  
                          at android.app.ActivityThread.main(ActivityThread.java:7225)  
                          at java.lang.reflect.Method.invoke(Native Method)  
                          at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)  
                          at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 

Kann mir jemand sagen, was mit dem Code falsch ist und auch helfen könnte mir Festsetzung es? Vielen Dank im Voraus, Julian.

+0

Sie benötigen Lebenszyklus von Aktivität zu verstehen funktionieren, Sie versuchen, Element in dem Layout vor setContent zu finden (...), so ist es noch nicht da –

Antwort

0

final TextView ergebnis =(TextView) findViewById(R.id.ergebnis); wird null sein, jeder Vorgang auf diesem wird NullPointerException ergeben. Es sollte innerhalb onCreate()

Ihr Code so etwas wie sein sollte:

int nein = 0; 
    int ja = 0; 
    final TextView ergebnis = null; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     ergebnis =(TextView) findViewById(R.id.ergebnis); 
    } 
+0

That Code funktioniert, wenn ich das Finale weglasse. Vielen Dank! – Julian

+0

@Julian: Viel Glück! – kosa

1

Sie die folgende Zeile an der falschen Stelle ausführen:

final TextView ergebnis =(TextView) findViewById(R.id.ergebnis); 

Die oben sollte in der onCreate() Methode durchgeführt werden und nach haben Sie setContentView() aufgerufen.

Das folgende ist, was es soll wie folgt aussehen:

public class MainActivity extends AppCompatActivity { 

int nein = 0; 
int ja = 0; 
TextView ergebnis; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    ergebnis =(TextView) findViewById(R.id.ergebnis); // <--- This is the fix 
} 

public void japluseins (View view) 
{ 
    ja++; 
} 

public void neinpluseins (View view) 
{ 
    nein++; 
} 

public void result (View view) 
{ 

    if(ja > nein) 
    { 
     ergebnis.setText(ja + " JA" + " vs " + nein + " NEIN" + "\nSomit hat JA gewonnen!"); 
    } 
} 
+1

Maan, ich schrieb das Gleiche! Hier ist dein Kommentar. – Recomer

+0

Aber wenn ich es dort einstelle, ist die Variable für die letzte Methode nicht mehr zugänglich:/ – Julian

+0

@Julian Stellen Sie sicher, dass Sie 'TextView ergebnis' an die Spitze der Klasse stellen. Wenn Sie es an die Spitze setzen, wird es eine 'Klassenvariable', oder anders ausgedrückt, ein' Feld'. Es kann dann auf die gesamte Klasse zugegriffen werden, einschließlich Ihrer 'result' Methode. – Subby

Verwandte Themen