Android Switch-Klasse stoppt Android App / java.lang.NullPointerException

MadTracki

Mitglied
Hi,
Ich habe aktuell Probleme mit der Switch-Klasse in meiner Android App. Ich benutze Eclipse mit Android 4.3. Immer wenn switch() {...} ausgeführt wird, stoppt die Android App im Emulator. ???:L
LogCat gibt folgenden Fehler aus:
Java:
11-30 08:29:18.296: D/AndroidRuntime(1562): Shutting down VM
11-30 08:29:18.334: W/dalvikvm(1562): threadid=1: thread exiting with uncaught exception (group=0x41465700)
11-30 08:29:18.354: E/AndroidRuntime(1562): FATAL EXCEPTION: main
11-30 08:29:18.354: E/AndroidRuntime(1562): java.lang.NullPointerException
11-30 08:29:18.354: E/AndroidRuntime(1562):     at de.madstar.asg_erfurtvertretungsplan.Vertreter$2.onClick(Vertreter.java:83)
11-30 08:29:18.354: E/AndroidRuntime(1562):     at android.view.View.performClick(View.java:4240)
11-30 08:29:18.354: E/AndroidRuntime(1562):     at android.view.View$PerformClick.run(View.java:17721)
11-30 08:29:18.354: E/AndroidRuntime(1562):     at android.os.Handler.handleCallback(Handler.java:730)
11-30 08:29:18.354: E/AndroidRuntime(1562):     at android.os.Handler.dispatchMessage(Handler.java:92)
11-30 08:29:18.354: E/AndroidRuntime(1562):     at android.os.Looper.loop(Looper.java:137)
11-30 08:29:18.354: E/AndroidRuntime(1562):     at android.app.ActivityThread.main(ActivityThread.java:5103)
11-30 08:29:18.354: E/AndroidRuntime(1562):     at java.lang.reflect.Method.invokeNative(Native Method)
11-30 08:29:18.354: E/AndroidRuntime(1562):     at java.lang.reflect.Method.invoke(Method.java:525)
11-30 08:29:18.354: E/AndroidRuntime(1562):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
11-30 08:29:18.354: E/AndroidRuntime(1562):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
11-30 08:29:18.354: E/AndroidRuntime(1562):     at dalvik.system.NativeStart.main(Native Method)

meine Vertreter.java :

Java:
package de.madstar.asg_erfurtvertretungsplan;

import java.text.SimpleDateFormat;
import java.util.Date;

import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.webkit.WebView;
import android.widget.Button;

public class Vertreter extends Activity implements android.view.View.OnClickListener {

	public Vertreter() {
       super();
   }
	
	public Button btnHeute;
	public Button btnMorgen;
	public WebView WV;
	public int foo = 1;

	//Teil vom Day-Checker von btnMorgen
	public enum Day {
	    SUNDAY, MONDAY, TUESDAY, WEDNESDAY,
	    THURSDAY, FRIDAY, SATURDAY 
	}
	Day day;
	public Vertreter(Day day) {
        this.day = day;
    }
	
	

	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_vertreter);
	}
	
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.vertreter, menu);
		
		WV = (WebView)findViewById(R.id.webView1);
		
		btnHeute = (Button)findViewById(R.id.button1);
		btnHeute.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                // Perform action on click
            	
            	SimpleDateFormat formatter = new SimpleDateFormat ("yyyy-MM-dd");
        		Date currentTime = new Date();
        		
        		WV.loadUrl("http://schedule.asg-erfurt.de/" + formatter.format(currentTime));        		
            }
        });
		
		
		btnMorgen = (Button)findViewById(R.id.button2);
		btnMorgen.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                // Perform action on click
            	           	
            	SimpleDateFormat formatter1 = new SimpleDateFormat ("yyyy-MM-");
            	SimpleDateFormat formatter2 = new SimpleDateFormat ("dd");
            	
            	Date currentTime = new Date();
            	
            	
            	//Prüfen ob Freitag,Samstag oder Sontag um auf Montag zu springen
            	switch(day) {          
                case FRIDAY:
                    foo = 3;
                    break;
                             
                case SATURDAY:
                    foo = 2;
                    break;
                            
                case SUNDAY:
                	foo = 1;
                	break;
                	
                case MONDAY: 
                	foo = 1;
                	break;
                
                case TUESDAY:
                	foo = 1;
                	break;
                	
                case WEDNESDAY:
                	foo = 1;
                	break;
                	
                case THURSDAY:
                	foo = 1;
                	break;
            }
            	//formatter2 in integer umwandeln
            	int form2 = Integer.parseInt(formatter2.format(currentTime));
            	            	
        		
            	
            	WV.loadUrl("http://schedule.asg-erfurt.de/" + formatter1.format(currentTime) + (form2 + foo));
            }
        });
		//		btnMorgen.setOnClickListener(this);
		
		
				
		return true;	
	}
	
	//Ab hier Optionen für dropdown menu in actionbar
	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		super.onOptionsItemSelected(item);
		switch(item.getItemId()){
		case R.id.action_settings:
			settingsMenuItem();
			break;
		}
		
		return true;
	}
	
	private void settingsMenuItem(){
		new AlertDialog.Builder(this)
		.setTitle("About")
		.setMessage("Vertretungsplan für das ASG-Erfurt" + '\n' + "Erstellt von Lucas Ehrich" + '\n' + "V1.1" + '\n' + '\n' + "Die Meldung: 'The page you were looking for doesn't exist.' bedeutet dass kein Vertretungsplan existiert.")
		.setNeutralButton("OK", new DialogInterface.OnClickListener() {
			
			@Override
			public void onClick(DialogInterface arg0, int arg1) {
				// TODO Auto-generated method stub
				
			}
		}).show();
		
	}
	
	@Override
	public void onClick(View v) {
		// TODO Nothing, just need it to run Onclick listener for buttons
		
	}

	
}

Im Prinziep soll die App Wenn es Freitag,Samstag oder Sonntag ist per Datum auf Montag springen damit ich auf eine Webseite zugreifen kann. :D
Ich weiß nun nicht mehr weiter warum die App sich beendet. Eclipse findet auf jedenfall keinen Fehler.
Das einzige das ich weiß ist, dass switch(day) {...} den Fehler auslöst. Ich weiß jedoch nicht warum. :bahnhof:
Könnte es vielleicht auch am
Java:
public enum Day {
	    SUNDAY, MONDAY, TUESDAY, WEDNESDAY,
	    THURSDAY, FRIDAY, SATURDAY 
	}
	Day day;
	public Vertreter(Day day) {
        this.day = day;
    }
liegen ?

MfG MadTracki / Danke im Vorraus :)
 
Zuletzt bearbeitet:

dzim

Top Contributor
Hm. Ich sehe spontan keinen Fehler. NullPointer aber heisst ja, du hast noch etwas nicht initialisiert. Day ist auch sicher gesetzt?

Ansonsten kann ich dir nur empfehlen auf Zeile 74 (new Date()) mal einen Breakpoint zu setzen und da zu debuggen - das ist wahrscheinlich das beste, was du hier machen kannst. Schön Zeiel für Zeile durchgehen, schauen, was null ist - und mit etwas Glück findest du es schnell!

PS: Nur zum Verständnis: Den Tag hast du abgeschnitten, damit du dort hoch oder runter zählen kannst?
 

MadTracki

Mitglied
Hm. Ich sehe spontan keinen Fehler. NullPointer aber heisst ja, du hast noch etwas nicht initialisiert. Day ist auch sicher gesetzt?

Ansonsten kann ich dir nur empfehlen auf Zeile 74 (new Date()) mal einen Breakpoint zu setzen und da zu debuggen - das ist wahrscheinlich das beste, was du hier machen kannst. Schön Zeiel für Zeile durchgehen, schauen, was null ist - und mit etwas Glück findest du es schnell!

PS: Nur zum Verständnis: Den Tag hast du abgeschnitten, damit du dort hoch oder runter zählen kannst?

Ich hatte den NullPointerException in der variable day sie war noch nicht gesetzt ... :bloed: :D
Ansonsten läuft jetzt alles.

dd = (bsp.) 27 (vom formatter2)
dann kann ich mit day feststellen welcher tag ist und wenn Samstag ist setze ich foo auf 2 damit er 2 Tage nach vorne springt um auf Montag zu gelangen ...
Die App ist ein Vertretungsplan der ein Datum benötigt ;)
 

kurztipp

Aktives Mitglied
Hallo,

klitzekleiner Verbesserungsvorschlag:
Java:
            	//Prüfen ob Freitag,Samstag oder Sontag um auf Montag zu springen
            	switch(day) {          
                case FRIDAY:
                    foo = 3;
                    break;
                             
                case SATURDAY:
                    foo = 2;
                    break;
                            
                case SUNDAY:                	
                case MONDAY: 
                case TUESDAY:
                case WEDNESDAY:
                case THURSDAY:
                	foo = 1;
                	break;
            }
Nachdem Du in den case-Bedingungen Sonntag bis Donnerstag immer dasselbe machst, wäre es handlicher, wenn Du die Bedingungen bis Donnerstag durchfallen lässt und erst da foo setzt. Spart Code und erhöht die Übersichtlichkeit.

Gruß
 

dzim

Top Contributor
Ich hätte es noch ganz anders gemacht: Calendar-Object holen, schauen, was für ein Tag es ist und mit calendarObject.set(Calendar.DAY_OF_MONTH, x) gearbeitet. Aber jedem das Seine ;-)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
W Navigation MenuItem Switch Fehler Android & Cross-Platform Mobile Apps 6
L Hintergrund eines Switch(Buttons) ändern Android & Cross-Platform Mobile Apps 3
O Android Switch Widget wird nicht angezeigt Android & Cross-Platform Mobile Apps 1
B Was fehlt mir hier für diese Klasse? ich habe es mit (>>> ... <<<) markiert. Android & Cross-Platform Mobile Apps 4
W aus Fragmente in andere Klasse wechseln mit Button Android & Cross-Platform Mobile Apps 3
J Android Datenbank Klasse nur für CRUD-Operation, oder auch mehr ? Android & Cross-Platform Mobile Apps 8
H Android Aufrufen von "setContentView" in einer anderen Klasse Android & Cross-Platform Mobile Apps 3
ms_cikar Thread / Intent als externe klasse Android & Cross-Platform Mobile Apps 1
S Android CheckBox Status von anderer Klasse aus ändern Android & Cross-Platform Mobile Apps 4
C Auf innere (Thread)Klasse zugreifen, von anderer Klasse aus Android & Cross-Platform Mobile Apps 3
G Klasse im selben Package aufrufen Android & Cross-Platform Mobile Apps 18
A Fehler beim Starten eines Intents - alles in einer Klasse funktioniert... Android & Cross-Platform Mobile Apps 4
A Kann nicht in TextView einer anderen Klasse schreiben - wieso? Android & Cross-Platform Mobile Apps 9
J Java ME Canvas Klasse Gameloop und Funktion Android & Cross-Platform Mobile Apps 2
M Wie in einer anderen "nicht canvas" klasse zeichne Android & Cross-Platform Mobile Apps 5

Ähnliche Java Themen

Neue Themen


Oben