1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

Crash nach Speichern von Einstellungen

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von nidhoeggr, 01.09.2010.

  1. nidhoeggr, 01.09.2010 #1
    nidhoeggr

    nidhoeggr Threadstarter Neuer Benutzer

    Beiträge:
    4
    Erhaltene Danke:
    0
    Registriert seit:
    01.09.2010
    Hallo!

    Erst mal die Ausgangslage:

    Ich habe ein Activiy, die einen Dialog mit einem Eingabefeld aufruft. Der Benutzer gibt seinen Namen ein und klickt ok :

    #code ... #
    builder.setPositiveButton(this.getResources().getString(R.string.ok), new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int whichButton) {

    hs.addScore(input.getText().toString().trim(), score);
    hs.saveList();

    startActivity(intent_main);

    }
    });


    hs ist eine Highscoreliste vom typ Highscore. saveList() sieht folgendermaßen aus:

    SharedPreferences preferences = context.getSharedPreferences("Highscore", 0);
    SharedPreferences.Editor editor = preferences.edit();
    editor.clear();

    for (int x=0; x<max; x++)
    {
    editor.putString("name"+x, this.names[x]);
    editor.putLong("score"+x, this.score[x]);
    }

    editor.commit();


    Ich hab nun folgendes problem:

    wenn ich das saveList() ausführe, stürzt das Programm bei startActivity ab. Wenn ich das saveList() weglasse, startet die Activity ganz normal. An anderer Stelle hat das saveList() alleine auch schon funktioniert. Nur die Kombi geht nicht.

    Muss ich den Editor irgendwie "abschließen" oder sowas in der Art - ich häng da jetzt schon zwei Tage dran und finde keine vernünftige Lösung.

    Wäre über ein paar Lösungsideen sehr dankbar :)
    mfg
     
  2. the_alien, 01.09.2010 #2
    the_alien

    the_alien Android-Lexikon

    Beiträge:
    1,559
    Erhaltene Danke:
    184
    Registriert seit:
    04.05.2009
    Stacktrace?
     
  3. nidhoeggr, 02.09.2010 #3
    nidhoeggr

    nidhoeggr Threadstarter Neuer Benutzer

    Beiträge:
    4
    Erhaltene Danke:
    0
    Registriert seit:
    01.09.2010
    Wenn damit die Ausgabe der Fehler bei LogCat gemeint ist:

    09-02 09:39:25.994: ERROR/AndroidRuntime(2683): Uncaught handler: thread main exiting due to uncaught exception
    09-02 09:39:26.064: ERROR/AndroidRuntime(2683): java.lang.RuntimeException: Unable to start activity ComponentInfo{nidhoeggr.squares/nidhoeggr.squares.SquarePanic}: android.view.InflateException: Binary XML file line #10: Error inflating class <unknown>
    09-02 09:39:26.064: ERROR/AndroidRuntime(2683): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2496)
    09-02 09:39:26.064: ERROR/AndroidRuntime(2683): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512)
    09-02 09:39:26.064: ERROR/AndroidRuntime(2683): at android.app.ActivityThread.access$2200(ActivityThread.java:119)
    09-02 09:39:26.064: ERROR/AndroidRuntime(2683): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863)
    09-02 09:39:26.064: ERROR/AndroidRuntime(2683): at android.os.Handler.dispatchMessage(Handler.java:99)
    09-02 09:39:26.064: ERROR/AndroidRuntime(2683): at android.os.Looper.loop(Looper.java:123)
    09-02 09:39:26.064: ERROR/AndroidRuntime(2683): at android.app.ActivityThread.main(ActivityThread.java:4363)
    09-02 09:39:26.064: ERROR/AndroidRuntime(2683): at java.lang.reflect.Method.invokeNative(Native Method)
    09-02 09:39:26.064: ERROR/AndroidRuntime(2683): at java.lang.reflect.Method.invoke(Method.java:521)
    09-02 09:39:26.064: ERROR/AndroidRuntime(2683): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
    09-02 09:39:26.064: ERROR/AndroidRuntime(2683): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
    09-02 09:39:26.064: ERROR/AndroidRuntime(2683): at dalvik.system.NativeStart.main(Native Method)
    09-02 09:39:26.064: ERROR/AndroidRuntime(2683): Caused by: android.view.InflateException: Binary XML file line #10: Error inflating class <unknown>
    09-02 09:39:26.064: ERROR/AndroidRuntime(2683): at android.view.LayoutInflater.createView(LayoutInflater.java:513)
    09-02 09:39:26.064: ERROR/AndroidRuntime(2683): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:565)
    09-02 09:39:26.064: ERROR/AndroidRuntime(2683): at android.view.LayoutInflater.rInflate(LayoutInflater.java:618)
    09-02 09:39:26.064: ERROR/AndroidRuntime(2683): at android.view.LayoutInflater.inflate(LayoutInflater.java:407)
    09-02 09:39:26.064: ERROR/AndroidRuntime(2683): at android.view.LayoutInflater.inflate(LayoutInflater.java:320)
    09-02 09:39:26.064: ERROR/AndroidRuntime(2683): at android.view.LayoutInflater.inflate(LayoutInflater.java:276)
    09-02 09:39:26.064: ERROR/AndroidRuntime(2683): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:198)
    09-02 09:39:26.064: ERROR/AndroidRuntime(2683): at android.app.Activity.setContentView(Activity.java:1622)
    09-02 09:39:26.064: ERROR/AndroidRuntime(2683): at nidhoeggr.squares.SquarePanic.onCreate(SquarePanic.java:58)
    09-02 09:39:26.064: ERROR/AndroidRuntime(2683): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
    09-02 09:39:26.064: ERROR/AndroidRuntime(2683): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459)
    09-02 09:39:26.064: ERROR/AndroidRuntime(2683): ... 11 more
    09-02 09:39:26.064: ERROR/AndroidRuntime(2683): Caused by: java.lang.reflect.InvocationTargetException
    09-02 09:39:26.064: ERROR/AndroidRuntime(2683): at nidhoeggr.squares.SquareView.<init>(SquareView.java:823)
    09-02 09:39:26.064: ERROR/AndroidRuntime(2683): at java.lang.reflect.Constructor.constructNative(Native Method)
    09-02 09:39:26.064: ERROR/AndroidRuntime(2683): at java.lang.reflect.Constructor.newInstance(Constructor.java:446)
    09-02 09:39:26.064: ERROR/AndroidRuntime(2683): at android.view.LayoutInflater.createView(LayoutInflater.java:500)
    09-02 09:39:26.064: ERROR/AndroidRuntime(2683): ... 21 more
    09-02 09:39:26.064: ERROR/AndroidRuntime(2683): Caused by: java.lang.ClassCastException: java.lang.Long
    09-02 09:39:26.064: ERROR/AndroidRuntime(2683): at android.app.ApplicationContext$SharedPreferencesImpl.getInt(ApplicationContext.java:2595)
    09-02 09:39:26.064: ERROR/AndroidRuntime(2683): at nidhoeggr.squares.Highscore.<init>(Highscore.java:29)
    09-02 09:39:26.064: ERROR/AndroidRuntime(2683): at nidhoeggr.squares.SquareView$SquareThread.<init>(SquareView.java:165)
    09-02 09:39:26.064: ERROR/AndroidRuntime(2683): ... 25 more
    09-02 09:40:41.330: ERROR/AndroidRuntime(2762): Uncaught handler: thread main exiting due to uncaught exception
    09-02 09:40:41.338: ERROR/AndroidRuntime(2762): java.lang.RuntimeException: Unable to start activity ComponentInfo{nidhoeggr.squares/nidhoeggr.squares.GameOverActivity}: java.lang.ClassCastException: java.lang.Long
    09-02 09:40:41.338: ERROR/AndroidRuntime(2762): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2496)
    09-02 09:40:41.338: ERROR/AndroidRuntime(2762): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512)
    09-02 09:40:41.338: ERROR/AndroidRuntime(2762): at android.app.ActivityThread.access$2200(ActivityThread.java:119)
    09-02 09:40:41.338: ERROR/AndroidRuntime(2762): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863)
    09-02 09:40:41.338: ERROR/AndroidRuntime(2762): at android.os.Handler.dispatchMessage(Handler.java:99)
    09-02 09:40:41.338: ERROR/AndroidRuntime(2762): at android.os.Looper.loop(Looper.java:123)
    09-02 09:40:41.338: ERROR/AndroidRuntime(2762): at android.app.ActivityThread.main(ActivityThread.java:4363)
    09-02 09:40:41.338: ERROR/AndroidRuntime(2762): at java.lang.reflect.Method.invokeNative(Native Method)
    09-02 09:40:41.338: ERROR/AndroidRuntime(2762): at java.lang.reflect.Method.invoke(Method.java:521)
    09-02 09:40:41.338: ERROR/AndroidRuntime(2762): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
    09-02 09:40:41.338: ERROR/AndroidRuntime(2762): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
    09-02 09:40:41.338: ERROR/AndroidRuntime(2762): at dalvik.system.NativeStart.main(Native Method)
    09-02 09:40:41.338: ERROR/AndroidRuntime(2762): Caused by: java.lang.ClassCastException: java.lang.Long
    09-02 09:40:41.338: ERROR/AndroidRuntime(2762): at android.app.ApplicationContext$SharedPreferencesImpl.getInt(ApplicationContext.java:2595)
    09-02 09:40:41.338: ERROR/AndroidRuntime(2762): at nidhoeggr.squares.Highscore.<init>(Highscore.java:29)
    09-02 09:40:41.338: ERROR/AndroidRuntime(2762): at nidhoeggr.squares.GameOverActivity.onCreate(GameOverActivity.java:29)
    09-02 09:40:41.338: ERROR/AndroidRuntime(2762): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
    09-02 09:40:41.338: ERROR/AndroidRuntime(2762): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459)


    Falls du was anderes meinst, erklärs mir bitte!

    Danke, mfg
     
  4. swordi, 02.09.2010 #4
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    steht ja da

    deine xml datei hat in zeile 10 einen fehler
     
  5. nidhoeggr, 02.09.2010 #5
    nidhoeggr

    nidhoeggr Threadstarter Neuer Benutzer

    Beiträge:
    4
    Erhaltene Danke:
    0
    Registriert seit:
    01.09.2010
    Das ist das XML File um das es geht, ich kann mir aber irgendwie nicht vorstellen dass da ein Fehler drin ist .... es funktioniert ja nur in diesem speziellen Fall nicht.

    Kurze Grundsatzfrage: Ich bin in Activity A und mach einen neuen Intent und rufe mit startActivity die Activity B auf - wenn ich nun wieder zu A zurück will muss ich doch wieder einen neuen Intent machen und so aufrufen wie bei B oder? muss ich die Activity A vom Hintergrund herausholen? Ich könnte mir vorstellen, dass ich das irgendwie falsch machen ...

    <?xml version="1.0" encoding="utf-8"?>


    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:screenOrientation="portrait">

    <nidhoeggr.squares.SquareView <!-- DAS IST ZEILE 10. -->
    android:id="@+id/square"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"/>

    <RelativeLayout
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >
    <TextView
    android:id="@+id/text"
    android:text="@string/square_layout_text_text"
    android:visibility="visible"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerInParent="true"
    android:gravity="center_horizontal"
    android:textColor="#000000"
    android:textSize="24sp"/>
    </RelativeLayout>

    </FrameLayout>
     
  6. the_alien, 02.09.2010 #6
    the_alien

    the_alien Android-Lexikon

    Beiträge:
    1,559
    Erhaltene Danke:
    184
    Registriert seit:
    04.05.2009
    Dann wäre es wohl interessant zu sehen was in SquareView passiert.

    Zur Grundsatzfrage: Wenn du nur zurück möchtest kannst du auch einfach die aktuelle Activity beenden.
     
  7. nidhoeggr, 02.09.2010 #7
    nidhoeggr

    nidhoeggr Threadstarter Neuer Benutzer

    Beiträge:
    4
    Erhaltene Danke:
    0
    Registriert seit:
    01.09.2010
    Also in SquareView läuft das ganze Spiel in einem Thread - so wie in dem LunarLander Beispiel. Ich hab dabei nur das Spielgeschehen im Thread verändert. Aber es muss doch einen Grund geben, warum der Fehler nur kommt wenn ich vorher die Einstellungen speicher?!

    Wie beende ich eine Activity ohne gleich alles zu beenden? Wenn ich ein finish() mach geht alles zu, und beim erneuten öffnen stürzt wieder alles ab.

    Wenn ich im saveList() nur die Zeile
    Code:
    editor.commit();
    weglasse, funktioniert alles einwandfrei. Nur wird mir die Punktezahl dann eben nicht gespeichert. Wie speichert man normalerweise eine Highscoreliste? Macht man das nicht mit SharedPreferences und einem Editor?

    Vielen Dank für deine Hilfe!
    mfg
     

Diese Seite empfehlen