Problem mit meiner App

Micka

Micka

Fortgeschrittenes Mitglied
1
Hallo,

ich arbeite momentan an einer App für die Lebenshilfe. Während meines Studiums habe ich mir selbst Android angelernt und komme eigentlich auch ganz gut zurecht.

Bei meiner App hab ich nun ein Fehler, warum er kommt verstehe ich teilweise.

ich poste einfach mal kurz eine Stelle der App die meiner meinung nach Grund für die Exception ist.

Code:
public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        extrasAbrufen();
        initiateData();
        mAdapter = new EintragListAdapter(this, mData);
        [B]System.out.println("Vor Footerauswahl tabellentyp= " + tabellentyp);[/B]
        if(tabellentyp == "taschengeld")
        {
            footer = getLayoutInflater().inflate(R.layout.ansichttaschengeldfooterlayout, null);
            restGuthaben = (TextView) findViewById(R.id.eintraegeAnzeigenTaschengeldRestWert);
            System.out.println("Gewählt wurde taschengeld");
        }else[B] if(tabellentyp == "wirtschaftsgeld")[/B]
        {
          [B]  System.out.println("gewählt wurde wirtschaftsgeld");[/B]
            footer = getLayoutInflater().inflate(R.layout.ansichtwirtschaftfooterlayout, null);
            restGuthaben = (TextView) findViewById(R.id.eintraegeAnzeigenHaushaltRestWert);
        }
        header = getLayoutInflater().inflate(R.layout.ansichttitellayout, null);
        listView = getListView();
        registerForContextMenu(listView);
        listView.addHeaderView(header);
        listView.addFooterView(footer);
        restGuthaben.setText(Double.toString(rest) + "€");  [B]Zeile 78 ist laut Eclipse diese[/B]
        this.setListAdapter(mAdapter);   
    }
Hier der Logcat:
05-12 18:41:45.451: D/dalvikvm(333): GC_EXTERNAL_ALLOC freed 227K, 52% free 2675K/5511K, external 2125K/2137K, paused 63ms
05-12 18:41:47.981: W/KeyCharacterMap(333): No keyboard for id 0
05-12 18:41:47.981: W/KeyCharacterMap(333): Using default keymap: /system/usr/keychars/qwerty.kcm.bin
05-12 18:41:48.831: V/ensacom(333): Insert new Eintrag: 12.5.2012, Einnahmen, 5.0, id=0 in Liste: haushalt1
05-12 18:41:48.911: I/System.out(333): Vor Footerauswahl tabellentyp= wirtschaftsgeld
05-12 18:41:49.001: D/dalvikvm(333): GC_EXTERNAL_ALLOC freed 85K, 50% free 2768K/5511K, external 2427K/2688K, paused 48ms
05-12 18:41:49.091: D/AndroidRuntime(333): Shutting down VM
05-12 18:41:49.091: W/dalvikvm(333): threadid=1: thread exiting with uncaught exception (group=0x40015560)
05-12 18:41:49.111: E/AndroidRuntime(333): FATAL EXCEPTION: main
05-12 18:41:49.111: E/AndroidRuntime(333): java.lang.RuntimeException: Unable to start activity ComponentInfo{de.micka.lebenshilfe/de.micka.lebenshilfe.Tabellenansicht}: java.lang.NullPointerException
05-12 18:41:49.111: E/AndroidRuntime(333): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
05-12 18:41:49.111: E/AndroidRuntime(333): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
05-12 18:41:49.111: E/AndroidRuntime(333): at android.app.ActivityThread.access$1500(ActivityThread.java:117)
05-12 18:41:49.111: E/AndroidRuntime(333): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
05-12 18:41:49.111: E/AndroidRuntime(333): at android.os.Handler.dispatchMessage(Handler.java:99)
05-12 18:41:49.111: E/AndroidRuntime(333): at android.os.Looper.loop(Looper.java:123)
05-12 18:41:49.111: E/AndroidRuntime(333): at android.app.ActivityThread.main(ActivityThread.java:3683)
05-12 18:41:49.111: E/AndroidRuntime(333): at java.lang.reflect.Method.invokeNative(Native Method)
05-12 18:41:49.111: E/AndroidRuntime(333): at java.lang.reflect.Method.invoke(Method.java:507)
05-12 18:41:49.111: E/AndroidRuntime(333): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
05-12 18:41:49.111: E/AndroidRuntime(333): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
05-12 18:41:49.111: E/AndroidRuntime(333): at dalvik.system.NativeStart.main(Native Method)
05-12 18:41:49.111: E/AndroidRuntime(333): Caused by: java.lang.NullPointerException
05-12 18:41:49.111: E/AndroidRuntime(333): at de.micka.lebenshilfe.Tabellenansicht.onCreate(Tabellenansicht.java:78)
05-12 18:41:49.111: E/AndroidRuntime(333): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
05-12 18:41:49.111: E/AndroidRuntime(333): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
05-12 18:41:49.111: E/AndroidRuntime(333): ... 11 more
Wie man sieht wird die Folgende Ausgabe vor der Exception gemacht:
05-12 18:41:48.911: I/System.out(333): Vor Footerauswahl tabellentyp= wirtschaftsgeld
ich frage mich warum die folgende Anweisung nicht durchlaufen wird
Code:
...}else[B] if(tabellentyp == "wirtschaftsgeld")[/B]
        {
          [B]  System.out.println("gewählt wurde wirtschaftsgeld");[/B]
Der Fehler kommt meiner Meinung nach daher das der Variable
EditText restGuthaben noch keine ID zu gewiesen wurde. Ist auch klar, wenn die Schleife nicht durchlaufen wird, wird auch keine ID zugewiesen da das ja in der Schleife geschieht.

Nur Warum? Warum wird die Schleife nicht durchlaufen?

Sieht jemand den Fehler?

Ich hänge mal mein ganzes Project gezippt an, denke aber nicht das der Fehler woanders versteckt ist.
 

Anhänge

  • Lebenshilfe-Haushaltsbuchv5.zip
    235,5 KB · Aufrufe: 48
Zuletzt bearbeitet:
Stringvergleich

Gesendet von meinem Galaxy Nexus mit der Android-Hilfe.de App
 
  • Danke
Reaktionen: Micka
Moin,

Dein erster Fehler ist, dass du nicht Strings mit "==" vergleichen kannst.
Nutze stattdessen:
PHP:
else if (tabellentyp.equals("wirtschaftsgeld"))
{
  ......
}

Viele Grüße, L4e

EDIT: @swordi: Mist, zuspät!

EDIT2: Android/Eclipse ist case sensitiv:
PHP:
public static String TABELLENTYP ="tabellentyp";
ist nicht dasselbe wie
PHP:
System.out.println("Vor Footerauswahl tabellentyp= " + tabellentyp);
 
Zuletzt bearbeitet von einem Moderator:
  • Danke
Reaktionen: Micka
Okay, das mit dem Stringvergleich via equals werd ich gleich mal ändern. Mal schauen obs dann klappt. Aber eigentlich müsste dann.schon die Initiate Data Probleme machen.

TABELLENTYP und tabellentyp sind zwei unterschiedliche Variablen, absichtlich.

Danke
 
Ach ja, hab's nicht gesehen, darunter initialisierst Du ja noch "tabellentyp".
Jedoch kannst Du ihn nicht ausgeben, da er anscheinend bei einem Aufruf des IF-Konstrukts immer noch den "Wert" "null" hat. Da man diesen Wert nicht ausgeben kann, empfehle ich dir, statt "null"
PHP:
tabellentyp = "";
zu nehmen.

Grüße, L4e
 
So, den korrekten Stringvergleich hab ich nun drin. Nun werden die Schleifen auch abgelaufen, allerdings wird nun wieder eine Exception geschmissen die ich mir nicht erklären kann.

Vielleicht bin ich auch nur noch zu Müde um zu checken.

Code:
if(tabellentyp.equals("taschengeld"))
        {
            footer = getLayoutInflater().inflate(R.layout.ansichttaschengeldfooterlayout, null);
            restGuthaben = (TextView) findViewById(R.id.eintraegeAnzeigenTaschengeldRestWert);
            System.out.println("Gewählt wurde taschengeld");
        }else if(tabellentyp.equals("wirtschaftsgeld"))
        {
            [B]System.out.println("gewählt wurde wirtschaftsgeld");[/B]
            footer = getLayoutInflater().inflate(R.layout.ansichtwirtschaftfooterlayout, null);
            [U]restGuthaben = (TextView) findViewById(R.id.eintraegeAnzeigenHaushaltRestWert);[/U]
        }
da diese Schleife noch durchlaufen wird(siehe LogCat wegen der SystemOuts)
denke ich Restguthaben sollte nun seine TextviewID zugeordnet seit.

Code:
header = getLayoutInflater().inflate(R.layout.ansichttitellayout, null);
        listView = getListView();
        registerForContextMenu(listView);
        listView.addHeaderView(header);
        listView.addFooterView(footer);
        initiateData();
        restGuthaben.setText(Double.toString(rest) + "€"); [B]ZEILE 80[/B]
        this.setListAdapter(mAdapter);
LogCat:
05-13 10:47:55.055: D/dalvikvm(720): GC_EXTERNAL_ALLOC freed 158K, 52% free 2666K/5447K, external 2125K/2137K, paused 50ms
05-13 10:47:57.845: W/KeyCharacterMap(720): No keyboard for id 0
05-13 10:47:57.845: W/KeyCharacterMap(720): Using default keymap: /system/usr/keychars/qwerty.kcm.bin
05-13 10:48:09.164: V/ensacom(720): Insert new Eintrag: 13.5.2012, Einnahmen, 5.0, id=0 in Liste: w1
05-13 10:48:09.224: I/System.out(720): Vor Footerauswahl tabellentyp= wirtschaftsgeld
05-13 10:48:09.224: I/System.out(720): gewählt wurde wirtschaftsgeld
05-13 10:48:09.364: D/dalvikvm(720): GC_EXTERNAL_ALLOC freed 83K, 50% free 2774K/5511K, external 2427K/2688K, paused 58ms
05-13 10:48:09.466: I/System.out(720): WIRTSCHAFTSGELDLABELS
05-13 10:48:09.474: D/AndroidRuntime(720): Shutting down VM
05-13 10:48:09.474: W/dalvikvm(720): threadid=1: thread exiting with uncaught exception (group=0x40015560)
05-13 10:48:09.484: E/AndroidRuntime(720): FATAL EXCEPTION: main
05-13 10:48:09.484: E/AndroidRuntime(720): java.lang.RuntimeException: Unable to start activity ComponentInfo{de.micka.lebenshilfe/de.micka.lebenshilfe.Tabellenansicht}: java.lang.NullPointerException
05-13 10:48:09.484: E/AndroidRuntime(720): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
05-13 10:48:09.484: E/AndroidRuntime(720): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
05-13 10:48:09.484: E/AndroidRuntime(720): at android.app.ActivityThread.access$1500(ActivityThread.java:117)
05-13 10:48:09.484: E/AndroidRuntime(720): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
05-13 10:48:09.484: E/AndroidRuntime(720): at android.os.Handler.dispatchMessage(Handler.java:99)
05-13 10:48:09.484: E/AndroidRuntime(720): at android.os.Looper.loop(Looper.java:123)
05-13 10:48:09.484: E/AndroidRuntime(720): at android.app.ActivityThread.main(ActivityThread.java:3683)
05-13 10:48:09.484: E/AndroidRuntime(720): at java.lang.reflect.Method.invokeNative(Native Method)
05-13 10:48:09.484: E/AndroidRuntime(720): at java.lang.reflect.Method.invoke(Method.java:507)
05-13 10:48:09.484: E/AndroidRuntime(720): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
05-13 10:48:09.484: E/AndroidRuntime(720): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
05-13 10:48:09.484: E/AndroidRuntime(720): at dalvik.system.NativeStart.main(Native Method)
05-13 10:48:09.484: E/AndroidRuntime(720): Caused by: java.lang.NullPointerException
05-13 10:48:09.484: E/AndroidRuntime(720): at de.micka.lebenshilfe.Tabellenansicht.onCreate(Tabellenansicht.java:80)
05-13 10:48:09.484: E/AndroidRuntime(720): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
05-13 10:48:09.484: E/AndroidRuntime(720): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
05-13 10:48:09.484: E/AndroidRuntime(720): ... 11 more

Sieht hier jemand das Problem?
 

Anhänge

  • Lebenshilfe-Haushaltsbuchv5-2.zip
    235,7 KB · Aufrufe: 48
Ich hatte ja erst gedacht, dass die Wrapperklasse Double keine statische toString() Methode hätte. Nachdem ich aber die API nachgeguckt habe, ist sie doch drin.

Da du auch in den "else"-Fall kommst, müsste restGuthaben null sein.
Könnte es sein, das du die id "eintraegeAnzeigenHaushaltRestWert" geändert hast, oder es keine TextView ist?
 
  • Danke
Reaktionen: Micka
Hmm. Werd das gleich mal nachgucken wwnn ich mich heute mit frischem Kopf dran setze. Bei Lösung des Problems poste ich das Problem.

Der ursprüngliche Beitrag von 07:20 Uhr wurde um 08:04 Uhr ergänzt:

okay, schade. Hab das Layout gerade nochmal überprüft. Es ist ein TextView und die ID stimmt auch. Wenn dem nicht so wäre wäre die Exception aber auch vorher gekommen denke ich. Bin grad Ratlos woran es liegt
 
Dann schlage ich dir vor, einfach zu debuggen.
Dann kannst du direkt an der Stelle sehen, welche Variable "null" ist.
Eine NPE ist mit die einfachste Exception die gelöst werden kann.

Um zu Debuggen klick doppelt vor die Zeile, so das ein blauer Punkt erscheint.

Dann startest du das Programm im DebugModus.
Wenn das Programm an die Stelle kommt, wirst du gefragt ob die Debug-Perspecive aufgemacht werden soll.
Dieses bestätigst du, und kannst dir die Varieblen in der "Variable-View" angucken.
Dort wirst du auch sehen, welche Variable null ist.

Danach würde ich den Breakpoint viel höher setzen und mit F6 kannst du die einzelnen Schritte durchgehen.

Gruß
 
  • Danke
Reaktionen: Micka
restGuthaben = (TextView) footer.findViewById(R.id.eintraegeAnzeigenHaushaltRestWert);

Wenn du den footer inflatest mußt du ihn auch benutzen, um die entsprechende View zu bekommen ;-)
 
  • Danke
Reaktionen: Micka
Tausend Dank, da lag das Problem. War mir bisher nicht bekannt das ich dann noch footer davor setzen muss.
 

Ähnliche Themen

Manny87
  • Manny87
Antworten
11
Aufrufe
164
swa00
swa00
B
Antworten
4
Aufrufe
487
bb321
B
FabianDev
Antworten
5
Aufrufe
555
swa00
swa00
Zurück
Oben Unten