Timer

  • 7 Antworten
  • Letztes Antwortdatum
L

LoLmAnxD1998

Ambitioniertes Mitglied
0
Hallo Leute,

Ich hab vor kurzem angefangen Android Apps zu programmieren und habe jetzt mit einem einfachen Timer angefangen. Alles was der können soll:
-Minuten/Sekunden in EditText eingeben
-Start Button Drücken
-Zeit herunterzählen
-bei 0 einen Alarm auslösen

Die App stürzt immer an wenn ich auf den Startbutton klicke. Wo ist der Fehler ?
Code:
public class TimerActivity extends Activity implements OnClickListener,
		Runnable {

	private EditText minutenET;
	private EditText sekundenET;
	private Button startButton;
	private Handler handler;
	private int minuten;
	private int sekunden;
	private int id;

	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.layout_timer);
		startButton = (Button) findViewById(R.id.startButton);
		startButton.setOnClickListener(this);
		minutenET = (EditText) findViewById(R.id.minutenET);
		sekundenET = (EditText) findViewById(R.id.sekundenET);

	}

	@Override
	public void run() {
		zeitZaehlen();

	}

	public void zeitZaehlen() {

		if (sekunden > 0) {
			sekunden -= 1;
		}
		if (sekunden == 0) {
			minuten -= 1;
		}
		if (minuten < 1) {
			starteAlarm();
		}
		aktualisieren();
		starteHandler();

	}

	public void aktualisieren() {
		minutenET.setText(String.valueOf(minuten));
		sekundenET.setText(String.valueOf(sekunden));
	}

	public void starteAlarm() {

	}

	public void starteHandler() {
		handler.postDelayed(this, 1000);
	}

	public void herunterZaehlen() {
		starteHandler();
		minuten = Integer.parseInt(minutenET.getText().toString());
		sekunden = Integer.parseInt(sekundenET.getText().toString());

	}

	@Override
	public void onClick(View v) {
		id = v.getId();
		if (id == R.id.startButton)
			herunterZaehlen();

	}
}
 
Habe mir das jetzt nicht genau angeschaut, aber im Logcat steht bestimmt detailliert wo das Problem liegt ;)
 
Wo finde ich das ? :)
 
Auf den ersten Blick würde ich Tippen:
NullPointerException in dieser Zeile:
handler.postDelayed(this, 1000);

handler wird wenn ich das richtig sehe nirgendwo gesetzt.
 
Danke für die Info, hatte ich vergessen :). Ich hab jetzt mal das auslesen der beiden EditTexts weggelassen und in der onCreate Methode fest definiert. So funktioniert es und es wird runtergezählt. es liegt also am Auslesen der EditText Felder. Wie mache ich das richtig ? :S
Code:
public class TimerActivity extends Activity implements OnClickListener,
		Runnable {

	private EditText minutenET;
	private EditText sekundenET;
	private Button startButton;
	private Handler handler = new Handler();
	private int minuten;
	private int sekunden;
	private int id;

	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.layout_timer);
		startButton = (Button) findViewById(R.id.startButton);
		startButton.setOnClickListener(this);
		minutenET = (EditText) findViewById(R.id.minutenET);
		sekundenET = (EditText) findViewById(R.id.sekundenET);
		// minuten = Integer.parseInt(minutenET.getText().toString());
		// sekunden = Integer.parseInt(sekundenET.getText().toString());
		minuten = 3;
		sekunden = 20;

	}

	@Override
	public void run() {
		zeitZaehlen();

	}

	public void zeitZaehlen() {

		if (sekunden > 0) {
			sekunden -= 1;
		}
		if (sekunden == 0) {
			minuten -= 1;
			sekunden = 60;
		}
		if (minuten < 1) {
			starteAlarm();
		}
		aktualisieren();
		starteHandler();

	}

	public void aktualisieren() {
		minutenET.setText(String.valueOf(minuten));
		sekundenET.setText(String.valueOf(sekunden));
	}

	public void starteAlarm() {

	}

	public void starteHandler() {
		handler.postDelayed(this, 1000);
	}

	public void herunterZaehlen() {

		starteHandler();

	}

	@Override
	public void onClick(View v) {
		id = v.getId();
		if (id == R.id.startButton)
			herunterZaehlen();

	}
 
Wie gesagt ohne Fehlermeldung ist das schwierig.
Evtl hast du einfach keine Zahlen in deinem EditText, was ist denn der Standardwert?
Wenn da keine Zahl drin steht dürfte das die parseInt Methode eine Exception werfen.

Nochwas:
Dein Wecker klingelt übrigens 1 Minute zu früh wenn ich das richtig sehe.
wenn dort 1:01 übrig sind ziehst du 1 sekunde ab macht 1:00 dann ziehst du eine minute ab macht 0:00 dann setzt du sekunden auf 60 macht 0:60 aber da minuten jetzt kleiner als 1 ist wird starteAlarm(aufgerufen.)
 
Also es stehen ja Zahlen in den Feldern die schreibt man ja selbst rein wenn die App gestartet wird. Nur das auslesen und umwandeln in eine Int Variable klappt nicht :S

Danke für die Info werde ich ändern :)

Der ursprüngliche Beitrag von 17:03 Uhr wurde um 17:41 Uhr ergänzt:

Ok hab den Fehler selber gefunden. Das auslesen der EditText Felder hab ich in die onCreate Methode geschrieben, aber da stand dann logischerweise noch nichts drin :) hab's jetzt in die onClick Methode geschrieben und jetzt funktioniert es :) Danke für die Hilfe
 
Genau das meinte ich.. vermutlich nicht genau genug beschrieben von mir :D
 
Zurück
Oben Unten