Jetzt registrieren » Login
« Login

Passwort vergessen?

Du bist hier: Android Forum » Android Developer Forum » Android Entwickler Forum » PreferenceActivity wird direkt nach aktivierung ausgeblendet
Gehe zu: Neue Beiträge | Eigene Threads | Beobachtete Threads

PreferenceActivity wird direkt nach aktivierung ausgeblendet

Um aktiv im Android Forum teilnehmen zu können, musst Du Dich bei AndroidPIT registriert haben.

User-Foto
Martin Weißhauptde

Rang: Android Junior

Beiträge: 16

Eintrittsdatum: 27.11.2009

PreferenceActivity wird direkt nach aktivierung ausgeblendet
verfasst am 07.02.2010 13:20:07
Hallo,

ich habe schon wieder eine Frage ;-)

Und zwar lese ich das Buch "Android - Grundlagen der Entwicklung", in diesem wird beschrieben, wie man einen Bildschirm zur Bearbeitung der Einstellungen aus der XML-Datei erzeugt.

Das klappt so weit ganz gut, nur dummerweise wird der Dialog direkt nach dem Aufruf wieder geschlossen.

Android Maifest:
1<activity
2 android:name=".CMDBSettings"
3 android:label="@string/preferences"
4 />

Aufruf im Optionsmenü:
1case R.id.menu_settings:
2 {
3 Intent settingsIntent = new Intent(getApplicationContext(), CMDBSettings.class);
4 startActivity(settingsIntent);
5 return true;
6 }

Meine PreferenceActivity:
1package eu.primescale.primecmdb;
2
3import android.content.ContextWrapper;
4import android.content.SharedPreferences;
5import android.os.Bundle;
6import android.preference.PreferenceActivity;
7import android.view.Menu;
8
9
10/**
11 *
12 * @author mw88
13 */
14public class CMDBSettings extends PreferenceActivity
15{
16 @Override
17 public void onCreate(Bundle savedInstanceState)
18 {
19 super.onCreate(savedInstanceState);
20 this.addPreferencesFromResource(R.xml.cmdb_cfg);
21 }
22
23 /**
24 * Returns settings
25 *
26 * @param ctx
27 * @return
28 */
29 public static final SharedPreferences getSettings(ContextWrapper ctx)
30 {
31 return ctx.getSharedPreferences(ctx.getPackageName()+"_preferences", 0);
32 }
33
34 @Override
35 protected void onSaveInstanceState(Bundle outState)
36 {
37 super.onSaveInstanceState(outState);
38 SharedPreferences settings = getSharedPreferences(CMDBSettings.class.getSimpleName(), 0);
39 SharedPreferences.Editor editor = settings.edit();
40
41 editor.commit();
42 }
43}

Hat jemand eine Idee woran das liegen könnte?
Antworten mit Zitat Antworten Link ±0     (0 Stimmen)
User-Foto
Mac Systemsde
Google Plus Twitter Facebook YouTube

Rang: Android GoldSenior

Beiträge: 1.007

Eintrittsdatum: 21.06.2009

RE: PreferenceActivity wird direkt nach aktivierung ausgeblendet
verfasst am 07.02.2010 15:49:48
Der Code sieht fast ok aus, daher tippe Ich auf ein Problem im XML da mir bekannt ist das die PreferencesActivity hier ein wenig "sensibel" ist.

Wieso speicherst du den Preferrences nochmal ? Soweit Ich das weiß tut die PreferencesActivity das längst.


Der Code sollte überflüssig sein:

1@Override
235 protected void onSaveInstanceState(Bundle outState)
336 {
437 super.onSaveInstanceState(outState);
538 SharedPreferences settings = getSharedPreferences(CMDBSettings.class.getSimpleName(), 0);
639 SharedPreferences.Editor editor = settings.edit();
740
841 editor.commit();

-----
Kite-fast.de - Chillen - PKRA 2010 Java MP3 Player - Wind Mate APP

Antworten mit Zitat Antworten Link ±0     (0 Stimmen)
User-Foto
Martin Weißhauptde

Rang: Android Junior

Beiträge: 16

Eintrittsdatum: 27.11.2009

RE: PreferenceActivity wird direkt nach aktivierung ausgeblendet
verfasst am 07.02.2010 17:29:51 — geändert am 07.02.2010 20:52:19
Danke für den Hinweis, ich habe den unnötigen Code entfernt.

Mir ist aufgefallen, dass sich dieses eigenartige Verhalten nicht nur auf die PreferenceActivity beschränkt, auch eine ListActivity, die ich aufgerufen habe zeigt das gleiche Verhalten.

Edit: ich habe mich mal mit dem Debugger beschäftigt...
1I/ActivityManager( 68): Displayed activity eu.primescale.primecmdb/.gui.CMDBSettings: 473 ms
2
3I/AndroidRuntime(14742): AndroidRuntime onExit calling exit(-1)
4
5I/ActivityManager( 68): Process eu.primescale.primecmdb (pid 14742) has died.
6
7I/WindowManager( 68): WIN DEATH: Window{43ab2070 eu.primescale.primecmdb/eu.primescale.primecmdb.gui.PrimeCMDB paused=false}
8
9I/WindowManager( 68): WIN DEATH: Window{4392c600 eu.primescale.primecmdb/eu.primescale.primecmdb.gui.CMDBSettings paused=false}
10
11D/Zygote ( 36): Process 14742 exited cleanly (255)
12
13I/ActivityManager( 68): Start proc eu.primescale.primecmdb for activity eu.primescale.primecmdb/.gui.PrimeCMDB: pid=14753 uid=10094 gids={}
14
15I/dalvikvm(14753): Debugger thread not active, ignoring DDM send (t=0x41504e4d l=38)
16
17I/dalvikvm(14753): Debugger thread not active, ignoring DDM send (t=0x41504e4d l=50)
18
19W/InputManagerService( 68): Got RemoteException sending setActive(false) notification to pid 14742 uid 10094
20
21I/ActivityManager( 68): Displayed activity eu.primescale.primecmdb/.gui.PrimeCMDB: 511 ms
22
23D/dalvikvm( 155): GC freed 1109 objects / 461208 bytes in 127ms

Ich kann jetzt leider noch keinen Fehler da raus lesen...
Antworten mit Zitat Antworten Link ±0     (0 Stimmen)
User-Foto
Mac Systemsde
Google Plus Twitter Facebook YouTube

Rang: Android GoldSenior

Beiträge: 1.007

Eintrittsdatum: 21.06.2009

RE: PreferenceActivity wird direkt nach aktivierung ausgeblendet
verfasst am 10.02.2010 02:25:31
Ich denke das Log ist sicherlich größer, schau mal genauer.

-----
Kite-fast.de - Chillen - PKRA 2010 Java MP3 Player - Wind Mate APP

Antworten mit Zitat Antworten Link ±0     (0 Stimmen)
User-Foto
Martin Weißhauptde

Rang: Android Junior

Beiträge: 16

Eintrittsdatum: 27.11.2009

RE: PreferenceActivity wird direkt nach aktivierung ausgeblendet
verfasst am 11.02.2010 21:36:03
Alle anderen Einträge im Log haben meiner Meinung nach nichts mit meiner Anwendung zu tun.

Ich wusste mir jetzt nicht anders zu helfen als den Quelltext mal hoch zu laden und zu hoffen, dass sich jemand findet, der Zeit und Lust hat meinen Code durch zu gucken ;-)

MobileCMDB
Antworten mit Zitat Antworten Link ±0     (0 Stimmen)
User-Foto
Mac Systemsde
Google Plus Twitter Facebook YouTube

Rang: Android GoldSenior

Beiträge: 1.007

Eintrittsdatum: 21.06.2009

RE: PreferenceActivity wird direkt nach aktivierung ausgeblendet
verfasst am 12.02.2010 01:20:57
Ich hab das mal unter Eclipse angeschaut. Der Fehler ist nicht offensichtlich, aber ein wenig Erfahrung half mir dann doch das Problem in ca. 3 Minuten zu finden.

Im Log sah ich folgendes:

02-12 01:06:40.519: DEBUG/dalvikvm(95): GC freed 2942 objects / 166504 bytes in 76ms
02-12 01:06:41.705: INFO/ActivityManager(52): Starting activity: Intent { cmp=eu.primescale.primecmdb/.gui.Statistics }
02-12 01:06:41.902: INFO/ActivityManager(52): Displayed activity eu.primescale.primecmdb/.gui.Statistics: 170 ms (total 170 ms)
02-12 01:06:41.959: DEBUG/AndroidRuntime(424): Shutting down VM
02-12 01:06:41.959: WARN/dalvikvm(424): threadid=3: thread exiting with uncaught exception (group=0x4001aa28)
02-12 01:06:41.959: ERROR/AndroidRuntime(424): Uncaught handler: thread main exiting due to uncaught exception
02-12 01:06:41.969: ERROR/AndroidRuntime(424): java.lang.RuntimeException: Unable to stop activity {eu.primescale.primecmdb/eu.primescale.primecmdb.gui.PrimeCMDB}: android.app.SuperNotCalledException: Activity {eu.primescale.primecmdb/eu.primescale.primecmdb.gui.PrimeCMDB} did not call through to super.onStop()
02-12 01:06:41.969: ERROR/AndroidRuntime(424): at android.app.ActivityThread.performStopActivityInner(ActivityThread.java:3124)
02-12 01:06:41.969: ERROR/AndroidRuntime(424): at android.app.ActivityThread.handleStopActivity(ActivityThread.java:3167)
02-12 01:06:41.969: ERROR/AndroidRuntime(424): at android.app.ActivityThread.access$2400(ActivityThread.java:116)
02-12 01:06:41.969: ERROR/AndroidRuntime(424): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1810)
02-12 01:06:41.969: ERROR/AndroidRuntime(424): at android.os.Handler.dispatchMessage(Handler.java:99)
02-12 01:06:41.969: ERROR/AndroidRuntime(424): at android.os.Looper.loop(Looper.java:123)
02-12 01:06:41.969: ERROR/AndroidRuntime(424): at android.app.ActivityThread.main(ActivityThread.java:4203)
02-12 01:06:41.969: ERROR/AndroidRuntime(424): at java.lang.reflect.Method.invokeNative(Native Method)
02-12 01:06:41.969: ERROR/AndroidRuntime(424): at java.lang.reflect.Method.invoke(Method.java:521)
02-12 01:06:41.969: ERROR/AndroidRuntime(424): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791)
02-12 01:06:41.969: ERROR/AndroidRuntime(424): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:549)
02-12 01:06:41.969: ERROR/AndroidRuntime(424): at dalvik.system.NativeStart.main(Native Method)
02-12 01:06:41.969: ERROR/AndroidRuntime(424): Caused by: android.app.SuperNotCalledException: Activity {eu.primescale.primecmdb/eu.primescale.primecmdb.gui.PrimeCMDB} did not call through to super.onStop()
02-12 01:06:41.969: ERROR/AndroidRuntime(424): at android.app.Activity.performStop(Activity.java:3596)
02-12 01:06:41.969: ERROR/AndroidRuntime(424): at android.app.ActivityThread.performStopActivityInner(ActivityThread.java:3121)
02-12 01:06:41.969: ERROR/AndroidRuntime(424): ... 11 more
02-12 01:06:41.979: INFO/Process(52): Sending signal. PID: 424 SIG: 3
02-12 01:06:41.979: INFO/dalvikvm(424): threadid=7: reacting to signal 3
02-12 01:06:41.989: INFO/dalvikvm(424): Wrote stack trace to '/data/anr/traces.txt'
02-12 01:06:46.969: DEBUG/dalvikvm(200): GC freed 44 objects / 2128 bytes in 55ms






Einmal in die Klasse PRimCMDB geschaut, findet sich der Übeltäter auch sofort.


1@Override
2 public void onStop()
3 {
4 System.exit(RESULT_OK);
5 }

Das darf man nicht, an sich hätte man das aber sofort sehen müssen in den Logs.

Es wäre dadurch __richtiger__ folgendes zu schreiben:


1@Override
2 public void onStop()
3 {
4 super.onStop();
5 System.exit(RESULT_OK);
6 }


Allerdings führt das dazu das die Statistics Activity sofort beendet wird.
Ich rate daher dazu die onStop gar nicht zu implementieren und stattdessen evtl. mit startActivityForResult zu Arbeiten. Nebenbei lohnt hin und wieder ein Blick auf den Activity-Lifecycle.

Bei so wenig Code und diesem Problem sollte die letzte Änderung einfach wieder zurückgenommen werden um zu testen ob das zu dem Problem führt, so sitzt man nicht ratlos vor dem Rechner ;)

Noch was fällt am Code auf:

1System.exit(RESULT_OK);

Was soll das der JVM sagen ? RESULT_OK wird für inter-Activity Kommunikation benutzt, nicht als Return Code eines kompletten Prozesses in Android!
System.exit() will zwar einen parameter, dieser wird aber meines Wissens nach von der JVM komplett ignoriert, daher ist es gut einen anderen Entwickler der auf den Code schaut das Gefühl zu geben hier wird ein Rückgabe wert erwartet/geprüft an einer anderen Stelle! Daher ist eine System.exit(1); aussagekräftiger!


hth,
Mac

-----
Kite-fast.de - Chillen - PKRA 2010 Java MP3 Player - Wind Mate APP

Antworten mit Zitat Antworten Link +1     (1 Stimme)
User-Foto
Martin Weißhauptde

Rang: Android Junior

Beiträge: 16

Eintrittsdatum: 27.11.2009

RE: PreferenceActivity wird direkt nach aktivierung ausgeblendet
verfasst am 12.02.2010 12:45:20
Vielen Dank, das war tatsächlich das Problem.

In dem Eclipse Plugin muss es mehr anzeigen als im ddms oder du hast andere Einstellungen, wie dem auch sei, muss ich wohl doch Eclipse noch einmal ordentlich aufsetzen... beim letzten Mal wollte mir Eclipse nicht ganz gehorchen und die Android-Plugins nicht installieren 8o

Nun auf zu neuen Fehlern xD
Antworten mit Zitat Antworten Link ±0     (0 Stimmen)
User-Foto
Mac Systemsde
Google Plus Twitter Facebook YouTube

Rang: Android GoldSenior

Beiträge: 1.007

Eintrittsdatum: 21.06.2009

RE: PreferenceActivity wird direkt nach aktivierung ausgeblendet
verfasst am 12.02.2010 12:57:49
Das ist das Logcat, das hat Netbeans sicherlich auch, nix was sich nicht sofort sehen lassen würde. (Ich nutze kein NB für Android Entwicklung).

-----
Kite-fast.de - Chillen - PKRA 2010 Java MP3 Player - Wind Mate APP

Antworten mit Zitat Antworten Link ±0     (0 Stimmen)
User-Foto
Martin Weißhauptde

Rang: Android Junior

Beiträge: 16

Eintrittsdatum: 27.11.2009

RE: PreferenceActivity wird direkt nach aktivierung ausgeblendet
verfasst am 12.02.2010 14:31:35
Ich habe gerade erst gemerkt, dass Netbeans unter Menü / Window / Output einen Eintrag namens ADB Log hat. doh :*)
Danke nochmal ;-)
Antworten mit Zitat Antworten Link ±0     (0 Stimmen)
Du bist hier: Android Forum » Android Developer Forum » Android Entwickler Forum » PreferenceActivity wird direkt nach aktivierung ausgeblendet
Gehe zu: Neue Beiträge | Eigene Threads | Beobachtete Threads

AndroidPIT unterstützen

Gefällt Dir AndroidPIT? Wir freuen uns, wenn Du uns unterstützt. Wie das geht? Klicke einfach auf die unten stehenden Links.

Weiterempfehlen

Gefällt Dir AndroidPIT? Dann empfiehl uns bitte weiter!

Fragen / Hilfe

Du hast Fragen zu AndroidPIT oder willst noch mehr erfahren? Diese Links helfen Dir vielleicht weiter...

  Du liest gerade: PreferenceActivity wird direkt nach aktivierung ausgeblendet - Android Forum - AndroidPIT. Alle Zeitangaben in UTC+02:00. Es ist jetzt 06:21 Uhr.