The preferences are apparently *cleared *when one tries to load them when 
there is a null key which is bad ! Reproducer :

    public class XmlExceptionTest extends AndroidTestCase {
        /** Run it twice - on the second run the exception is thrown */
        public void testXmlException() {
            Context ctx = getContext();
            SharedPreferences prefs = PreferenceManager
                .getDefaultSharedPreferences(ctx); // exception thrown here 
(line 18)
            // and apparently it clears the prefs as the condition below is 
false
            if (prefs.contains("run_once")) { // false
                Log.w("XmlExceptionTest",
                    "contains null key :" + prefs.contains(null));
            }
            Editor e = prefs.edit();
            e.putBoolean("run_once", true).commit();
            e.putString(null, "I put a sting with null key").commit();
            assertTrue("Contains null", prefs.contains(null));
            PreferenceManager.getDefaultSharedPreferences(ctx); // exception
            // NOT thrown here  - why ? - apparently there is a static 
factory
            // returning the instance it already constructed
            // e.clear().commit(); // this eliminates the exception
        }
    }
    
exception :

    W/ApplicationContext(): getSharedPreferences
    W/ApplicationContext(): org.xmlpull.v1.XmlPullParserException: Map 
value without name attribute: string
    W/ApplicationContext():     at 
com.android.internal.util.XmlUtils.readThisMapXml(XmlUtils.java:521)
    W/ApplicationContext():     at 
com.android.internal.util.XmlUtils.readThisValueXml(XmlUtils.java:733)
    W/ApplicationContext():     at 
com.android.internal.util.XmlUtils.readValueXml(XmlUtils.java:667)
    W/ApplicationContext():     at 
com.android.internal.util.XmlUtils.readMapXml(XmlUtils.java:470)
    W/ApplicationContext():     at 
android.app.ContextImpl.getSharedPreferences(ContextImpl.java:361)
    W/ApplicationContext():     at 
android.preference.PreferenceManager.getDefaultSharedPreferences(PreferenceManager.java:348)
    W/ApplicationContext():     at 
gr.uoa.di.android.helpers.test.XmlExceptionTest.testXmlException(XmlExceptionTest.java:18)
    W/ApplicationContext():     at 
java.lang.reflect.Method.invokeNative(Native Method)
    W/ApplicationContext():     at 
java.lang.reflect.Method.invoke(Method.java:521)
    W/ApplicationContext():     at 
junit.framework.TestCase.runTest(TestCase.java:154)
    W/ApplicationContext():     at 
junit.framework.TestCase.runBare(TestCase.java:127)
    W/ApplicationContext():     at 
junit.framework.TestResult$1.protect(TestResult.java:106)
    W/ApplicationContext():     at 
junit.framework.TestResult.runProtected(TestResult.java:124)
    W/ApplicationContext():     at 
junit.framework.TestResult.run(TestResult.java:109)
    W/ApplicationContext():     at 
junit.framework.TestCase.run(TestCase.java:118)
    W/ApplicationContext():     at 
android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:169)
    W/ApplicationContext():     at 
android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:154)
    W/ApplicationContext():     at 
android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:520)
    W/ApplicationContext():     at 
android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1447)

Posted in SO 
here<http://stackoverflow.com/questions/19610569/android-sharedpreferences-null-keys-values-and-sets-corner-cases>and
 in the relevant thread 
here <http://stackoverflow.com/a/19621603/281545> - but still no answers

Any ideas ?

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Android Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to