1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

Problem mit meiner App

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von Micka, 12.05.2012.

  1. Micka, 12.05.2012 #1
    Micka

    Micka Threadstarter Erfahrener Benutzer

    Beiträge:
    173
    Erhaltene Danke:
    1
    Registriert seit:
    30.12.2011
    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:
    Wie man sieht wird die Folgende Ausgabe vor der Exception gemacht:
    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:

    Zuletzt bearbeitet: 19.06.2012
  2. swordi, 13.05.2012 #2
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    Stringvergleich

    Gesendet von meinem Galaxy Nexus mit der Android-Hilfe.de App
     
    Micka bedankt sich.
  3. Linux4ever, 13.05.2012 #3
    Linux4ever

    Linux4ever Erfahrener Benutzer

    Beiträge:
    161
    Erhaltene Danke:
    27
    Registriert seit:
    16.01.2012
    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 von einem Moderator bearbeitet: 15.05.2012
    Micka bedankt sich.
  4. Micka, 13.05.2012 #4
    Micka

    Micka Threadstarter Erfahrener Benutzer

    Beiträge:
    173
    Erhaltene Danke:
    1
    Registriert seit:
    30.12.2011
    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
     
  5. Linux4ever, 13.05.2012 #5
    Linux4ever

    Linux4ever Erfahrener Benutzer

    Beiträge:
    161
    Erhaltene Danke:
    27
    Registriert seit:
    16.01.2012
    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
     
  6. Micka, 13.05.2012 #6
    Micka

    Micka Threadstarter Erfahrener Benutzer

    Beiträge:
    173
    Erhaltene Danke:
    1
    Registriert seit:
    30.12.2011
    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:
    Sieht hier jemand das Problem?
     

    Anhänge:

  7. Kardroid, 13.05.2012 #7
    Kardroid

    Kardroid Android-Experte

    Beiträge:
    484
    Erhaltene Danke:
    81
    Registriert seit:
    03.10.2009
    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?
     
    Micka bedankt sich.
  8. Micka, 14.05.2012 #8
    Micka

    Micka Threadstarter Erfahrener Benutzer

    Beiträge:
    173
    Erhaltene Danke:
    1
    Registriert seit:
    30.12.2011
    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
     
  9. Kardroid, 14.05.2012 #9
    Kardroid

    Kardroid Android-Experte

    Beiträge:
    484
    Erhaltene Danke:
    81
    Registriert seit:
    03.10.2009
    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ß
     
    Micka bedankt sich.
  10. Tom299, 14.05.2012 #10
    Tom299

    Tom299 Android-Experte

    Beiträge:
    602
    Erhaltene Danke:
    120
    Registriert seit:
    31.08.2011
    restGuthaben = (TextView) footer.findViewById(R.id.eintraegeAnzeigenHaushaltRestWert);

    Wenn du den footer inflatest mußt du ihn auch benutzen, um die entsprechende View zu bekommen ;-)
     
    Micka bedankt sich.
  11. Micka, 14.05.2012 #11
    Micka

    Micka Threadstarter Erfahrener Benutzer

    Beiträge:
    173
    Erhaltene Danke:
    1
    Registriert seit:
    30.12.2011
    Tausend Dank, da lag das Problem. War mir bisher nicht bekannt das ich dann noch footer davor setzen muss.
     

Diese Seite empfehlen