0

Ich versuche, einen booleschen Wert durch Sharedpreferences zu erhalten und festzulegen. Der folgende Code funktioniert perfekt auf Marshmallow, aber nicht auf Lolipop (5.0.1) - ich bekomme eine Ausnahme: java.lang.ClassCastException: java.lang.String kann nicht in java.lang.Boolean umgewandelt werden, wenn ich gettintroStatus() aufrufenjava.lang.ClassCastException: java.lang.String kann nicht in java.lang.Boolean umgewandelt werden

Irgendwelche Hilfe?

public void setIntrodone(boolean status) { 
     editor = settings.edit(); 
     editor.putBoolean("intro_done_boolean", status); 
     editor.commit(); 
    } 

    public boolean getintroStatus() { 
     try { 
      return settings.getBoolean("intro_done_boolean", false); 
     } catch (Exception e) { 
      e.printStackTrace(); 
      return false; 
     } 

    } 

Logcat Fehler:

java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Boolean 
04-20 14:06:59.438 1401-1401/io.authme.home W/System.err:  at android.app.SharedPreferencesImpl.getBoolean(SharedPreferencesImpl.java:263) 
04-20 14:06:59.438 1401-1401/io.authme.home W/System.err:  at io.authme.home.MitroApplication.getintroStatus(MitroApplication.java:107) 
04-20 14:06:59.438 1401-1401/io.authme.home W/System.err:  at io.authme.home.MainActivity.onCreate(MainActivity.java:81) 
04-20 14:06:59.438 1401-1401/io.authme.home W/System.err:  at android.app.Activity.performCreate(Activity.java:6285) 
04-20 14:06:59.438 1401-1401/io.authme.home W/System.err:  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118) 
04-20 14:06:59.438 1401-1401/io.authme.home W/System.err:  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2405) 
04-20 14:06:59.438 1401-1401/io.authme.home W/System.err:  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2535) 
04-20 14:06:59.438 1401-1401/io.authme.home W/System.err:  at android.app.ActivityThread.access$900(ActivityThread.java:154) 
04-20 14:06:59.438 1401-1401/io.authme.home W/System.err:  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1380) 
04-20 14:06:59.438 1401-1401/io.authme.home W/System.err:  at android.os.Handler.dispatchMessage(Handler.java:102) 
04-20 14:06:59.438 1401-1401/io.authme.home W/System.err:  at android.os.Looper.loop(Looper.java:148) 
04-20 14:06:59.438 1401-1401/io.authme.home W/System.err:  at android.app.ActivityThread.main(ActivityThread.java:5490) 
04-20 14:06:59.438 1401-1401/io.authme.home W/System.err:  at java.lang.reflect.Method.invoke(Native Method) 
04-20 14:06:59.438 1401-1401/io.authme.home W/System.err:  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
04-20 14:06:59.438 1401-1401/io.authme.home W/System.err:  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
+1

fügen Sie bitte logcat/Fehlerprotokoll –

+0

getan ........... – user1051505

+0

siehe http://StackOverflow.com/questions/16329426/reference-cannot-cast-java-lang-boole-to -string – pRaNaY

Antwort

1

Es scheint mir, dass es etwas mit der Android-Version zu tun haben, tut, vielleicht, dass ein anderes Gerät hatte Präferenz mit dem gleichen Schlüssel auf einige String und Ursachen du Probleme.

Ich schlage vor, dass Sie sicherstellen, dass Sie den gleichen Schlüssel nicht woanders verwenden, wenn Sie sicher sind, dass ID nicht empfiehlt, dass Sie Ihre App-Daten auf dem anderen Gerät löschen und es erneut versuchen.

1

Sägen dies in SharedPreferences.getBoolean Dokumentation:

Returns the preference value if it exists, or defValue. Throws ClassCastException if there is a preference with this name that is not a boolean.

Vielleicht haben Sie diesen Schlüssel, bevor Sie einen Wert zu speichern, die kein boolean war? Dies scheint offensichtlich, aber haben Sie versucht, Ihre App manuell zu deinstallieren, bevor Sie sie erneut ausführen?

Auch was ist Ihre MinSDK (in Ihrem Build.gradle)? Sie können es auf 21 (see API Levels here) senken, wenn das nicht der Fall ist. Sie könnten etwas woanders in Ihrem Projekt verwenden, das Ihren Einstellungen entspricht und das Android 5.0 nicht ausführen kann.