لا يمكن الوصول إلى التفضيلات التي تم إنشاؤها عن طريق النشاط

StackOverflow https://stackoverflow.com/questions/3497542

سؤال

لديّ أدنى برنامج لا يسمح لي بقليل من تعيين تفضيلتين (int وسلسلة) باستخدام Android's PreferenceActivity. لذلك لدي ملف XML يحدد تفضيلاتي ، ونشاط يمتد PreferenceActivity. يحتوي نشاطي الرئيسي على قائمة خيارات تطلق نشاط التفضيل الخاص بي. كل هذا يعمل بشكل رائع. يمكنني ضبط تفضيلاتي ويتم الاحتفاظ بالقيم أثناء تنفيذ وبعد تنفيذ البرنامج.

الآن ، في نشاطي الرئيسي ، أريد استرداد تلك التفضيلات. يجب أن يكون سهلا ، أليس كذلك؟ إليك الرمز من كل عينة رأيتها على الإطلاق:

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
int intSetting = prefs.getInt("intSetting", 0);
String strSetting = prefs.getString("strSetting", "");

المشكلة هي ، إذا كسرت في getInt() اتصل والخطوة ، ويبدو أن مجموعتي هكذا وسيتعطل التطبيق إذا واصلت:

الموضوع [<3> الرئيسي] (معلق)
Activitythread.performLaUnchActivity (ActivityThread $ ActivityRecord ، NEW) الخط: 2494
Activitythread.HandlaunchActivity (Activitythread $ ActivityRecord ، NEW) الخط: 2512
ActivityThread.Access $ 2200 (Activitythread ، Activitythread $ ActivityRecord ، NEW) الخط: 119
Activitythread $ H.HandleMessage (رسالة) السطر: 1863
Activitythread $ H (Handler) .DispatchMessage (رسالة) السطر: 99 looper.loop () السطر: 123
ActivityThread.main (String []) السطر: 4363 method.invokenistial (كائن ، كائن [] ، فئة ، فئة [] ، فئة ، int ، منطقية) السطر: غير متاح [الطريقة الأصلية] method.invoke (كائن ، كائن .. .) الخط: 521
zygoteinit $ methersandargscaller.run () السطر: 860 zygoteinit.main (سلسلة []): 618 nativestart.main (سلسلة []) السطر: غير متوفر [الطريقة الأصلية

لقد جربت الاختلافات على المعلمة التي تم تمريرها إلى getDefaultSharedPreferences () ، بما في ذلك:

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());

... وربما البعض الآخر في سياق مختلف (أي عند الوصول إلى التفضيلات من نشاطي الرئيسي مقابل نشاط آخر مقابل بعض الوظائف في فصل ليس نشاطًا. والنتيجة هي نفسها دائمًا.

لقد قرأت عشرة منشورات سؤال وجواب على الويب من الآخرين مع هذه المشكلة الذين حلوها عن طريق كتابة رمز متطابق مع الألغام ، لذلك لا أتوقع أن يكون هناك حل ولكن إذا كان لدى أي شخص أي أفكار ، فأخبرني بذلك.

هل كانت مفيدة؟

المحلول

أنت لا تظهر تتبع المكدس. ال Thread [<3> main] (Suspended) هو ناتج عديمة الفائدة من Eclipse. تحتاج إلى فحص تتبع المكدس الحقيقي ، والذي يجب أن تحصل عليه من خلال السماح لـ Android بمتابعة مربع الحوار "إغلاق القوة" ، ثم النظر إلى logcat (في منظور DDMS الخاص بك) لتتبع المكدس.

أظن أن لديك تفضيل اسمه intSetting لكنها ليست عددًا صحيحًا ، لكن هذا مجرد تخمين. خارج الكفة ، لا أستطيع التفكير في أي من المدمج في Preference الفصول التي ستخزن تفضيلات عدد صحيح ، لأنها في الغالب تخزن السلاسل.

طريقتك في الوصول إلى الافتراضي SharedPreferences (استخدام this) صحيح ويجب ألا تحتاج إلى تغيير.

هنا مشروع عينة إظهار استخدام PreferenceActivity والحصول على SharedPreferences الى الخلف.

نصائح أخرى

فقط للتأكد:

  • فيك AndroidManifest يجب أن يكون لديك Activity هذا يمتد PreferenceActivity مع شيء مثل هذا:

    <Activity Android: Name = ". actives.preferences" Android: label = "@string/app_name"/>

  • ال Activity هذا يمتد PreferenceActivity يجب أن يكون للرمز التالي:

    Override محمي void onCreate (bundle SaveInstancestate) {super.oncreate (SaveInstancestate) ؛ AddPreferencesFromResource (R.Layout.Prefs) ؛ }

أين R.layout.prefs هل تفضيلاتك "XML.

إذا كنت قد فعلت كلا الأمرين ، فيرجى تحرير سؤالك باستخدام XML الذي تستخدمه حتى تتمكن PPL من إعادة إنتاج مشكلتك.

لن يعطل ذلك ، حتى لو لم يتم حفظ تفضيلاتك ، أعتقد أنك فاتتك بعض التعليمات البرمجية ولم يأت الحادث من هذه النقطة. هل لديك بعض المواضيع الأخرى؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top