Zurück-Button lässt Activity abstürzen

  • Antworten:4
  • Bentwortet
Bob Kelzo
  • Forum-Beiträge: 32

09.11.2012, 01:42:07 via Website

Hallo Leute,

also ich habe in meiner App eine Activity mit zwei Eingabefeldern und zwei Buttons. Wenn man einen der Buttons drückt werden die beiden Eingabefelder eingelesen und mit den Werten eine neue Activity gestartet. Soweit funktioniert das auch ganz gut. Mein Problem ist nur, dass wenn man die Activity startet, aber anstatt etwas einzugeben und nen Button zu drücken man die Zurück-Taste benutzt, die App mit folgender Fehlermeldung abstürzt:

java.lang.RuntimeException: Unable to destroy Activity: java.lang.NullPointerException
at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3314)

Würde ich mich gerade nicht zu blöd anstellen um aus LogCat zu kopieren, würde ich hier auch die gesamte Fehlermeldung einfügen anstatt abzuschreiben. Aber ich denke mal das hier ist der relevante Part.

Hier mal der Code der betreffenden Klasse:

1package com.blabla.ausgaben;
2
3import android.app.Activity;
4import android.content.Intent;
5import android.os.Bundle;
6import android.view.View;
7import android.view.View.OnClickListener;
8import android.widget.Button;
9import android.widget.EditText;
10import android.widget.Toast;
11
12public class UpdateActivity extends Activity {
13
14
15
16 private float wert;
17 private String zweck;
18 private AusgabenOpenHandler openHandler;
19 private long id;
20 private int monat;
21 private int jahr;
22
23
24 @Override
25 public void onCreate(Bundle savedInstanceState) {
26 super.onCreate(savedInstanceState);
27 // Parameter des Intents empfangen
28 Intent intent = getIntent();
29 monat = intent.getIntExtra("monat", 0);
30 jahr = intent.getIntExtra("jahr", 0);
31 id = intent.getLongExtra("id", 0);
32 setContentView(R.layout.activity_update);
33 Button einnahmeButton = (Button) findViewById(R.id.einnahmebutton);
34 einnahmeButton.setOnClickListener(new OnClickListener() {
35 public void onClick(View v) {
36 einnahmeButtonClicked();
37 }
38 });
39 Button ausgabeButton = (Button) findViewById(R.id.ausgabebutton);
40 ausgabeButton.setOnClickListener( new OnClickListener() {
41 public void onClick(View v) {
42 ausgabeButtonClicked();
43 }
44 });
45
46 } // Ende onCreate
47
48
49
50 public void einnahmeButtonClicked() {
51 EditText editWert = (EditText) findViewById(R.id.eingabefeld);
52 wert = Float.valueOf(editWert.getText().toString());
53 EditText editZweck = (EditText) findViewById(R.id.zweckfeld);
54 zweck = editZweck.getText().toString();
55 System.out.println(id);
56 System.out.println(wert);
57 System.out.println(zweck);
58 openHandler = new AusgabenOpenHandler(this);
59 openHandler.update(id, wert, zweck);
60 Toast.makeText(this, "Werte geändert", Toast.LENGTH_SHORT).show();
61 Intent intent = new Intent(UpdateActivity.this, TestActivityActivity.class);
62 intent.putExtra("monat", monat);
63 intent.putExtra("jahr", jahr);
64 startActivity(intent);
65 }
66
67
68
69 @Override
70 protected void onDestroy() {
71 openHandler.close();
72 super.onDestroy();
73 }
74
75
76
77 public void ausgabeButtonClicked() {
78 EditText editWert = (EditText) findViewById(R.id.eingabefeld);
79 wert = Float.valueOf(editWert.getText().toString());
80 wert = wert - (2*wert);
81 EditText editZweck = (EditText) findViewById(R.id.zweckfeld);
82 zweck = editZweck.getText().toString();
83 System.out.println(id);
84 System.out.println(wert);
85 System.out.println(zweck);
86 openHandler = new AusgabenOpenHandler(this);
87 openHandler.update(id, wert, zweck);
88 Toast.makeText(this, "Werte geändert", Toast.LENGTH_SHORT).show();
89 Intent intent = new Intent(UpdateActivity.this, TestActivityActivity.class);
90 intent.putExtra("monat", monat);
91 intent.putExtra("jahr", jahr);
92 startActivity(intent);
93 }
94
95} // Ende der Klasse


Ich hoffe ihr könnt mir sagen wo mein Fehler liegt. So wie ich mich kenne hab ich bestimmt nur wieder irgendwas banales übersehen :grin:

Antworten
Bob Kelzo
  • Forum-Beiträge: 32

09.11.2012, 09:12:33 via Website

Also tatsächlich was banales^^

Wenn ich das openHandler.close() auskommentiere, funktionierts tatsächlich. Nur in dem Buch, aus dem ich den Umgang mit Datenbanken habe, steht ausdrücklich drin, dass man onDestroy() überschreiben soll, weil die geöffnete Datenbank noch geschlossen werden muss. Daher hab ich da den Fehler nicht vermutet ;-)

Antworten
Gelöschter Account
  • Forum-Beiträge: 694

09.11.2012, 10:37:14 via Website

Das was in den Buch steht ist korrekt. Hat aber nichts damit zu tun das Du ein nicht existierendes Objekt schließt.

onCreate und onDestroy sind als Pärchen zu betrachten. Wenn Du im onDestroy etwas schließt dann solltest Du es auch im onCreate öffnen - und nicht erst auf einen Button-Click.

Antworten
Bob Kelzo
  • Forum-Beiträge: 32

09.11.2012, 18:04:40 via Website

Alles klar, danke für die Hilfe!

Antworten