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. 😀
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:
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?
 
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: 😀
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 😉
 
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ß
 
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 ;-)
 

Neue Themen


Zurück
Oben