I posted an issue which is fixed: 
http://code.google.com/p/android/issues/detail?id=63463



On Wednesday, October 30, 2013 12:48:12 PM UTC+2, Mr&Mrs D wrote:
>
> 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