Tuesday, January 7, 2014

[android-developers] Re: why does SharedPreferences framework allow you to insert a preference with a null key - given it can't reload the preferences afterwards?

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 and in the relevant thread here - 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 android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers+unsubscribe@googlegroups.com
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 android-developers+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

0 Comments:

Post a Comment

Subscribe to Post Comments [Atom]

<< Home


Real Estate