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.