سؤال

تعطل تطبيقي مع استثناء مؤشر فارغ على الكود أدناه. لدي ملف تفضيلات XML ضمن Res/XML/Defaults.xml أي فكرة عن سبب تعطله؟

public class Preference extends Activity {
    public Preference()
    {
    }

    public String getPreference(String key)
    {
                //it still crashes here
        SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this.getApplicationContext());
        String result = settings.getString(key,  null);
        return result;
    }
}
هل كانت مفيدة؟

المحلول

ملفات التفضيل هي ليس Storead في المشروع /res/xml/defaults.xml

يتم تخزينها على الجهاز في مجلد التطبيق الخاص بك شيء مثل

/data/data/com.your.pkg/default.prefs

حاول عدم تحديد اسم الملف ، حيث سيكون لديك بعض المشكلات في ملفات التفضيل ، مثل هذا OP هنا

SharedPreferences preferences = PreferenceManager
                    .getDefaultSharedPreferences(context);

ثم على الأرجح سيتعين عليك الاستعلام

preferences.getString('weightPref', null);

نصائح أخرى

إليك رمز عينة يوضح كيفية حفظ وتفضيلات التفضيلات. أنا هنا أقوم بحفظ اسم المستخدم وكلمة المرور في المشاركين.

SharedPreferences uPreferences = getSharedPreferences("CurrentUser", MODE_PRIVATE);
SharedPreferences.Editor editor; = uPreferences.edit(); //Instantiating editor object


protected void storeSharedPrefs(String username, String password) {
        /*
         * Storing in Shared Preferences
         */
        editor.putString("username", username);
        editor.putString("password", password);     
        editor.commit();  //Commiting changes
    }

استرداد اسم المستخدم وكلمة المرور في نشاط آخر من المشاركين.

 private SharedPreferences mSP;
    mSP = getSharedPreferences("CurrentUser", MODE_PRIVATE);
            String username = mSP.getString("username", null);
            String password = mSP.getString("password", null);

أتمنى أن يساعد ..

تحديد قيمة في التفضيلات المشتركة:

Editor prefs = getSharedPreferences("Application_name", MODE_PRIVATE).edit();
prefs.putString("key", accountKey);
prefs.commit();

الحصول على القيمة من نشاط آخر:

String accountKey = 
    this.getSharedPreferences("Application_name", MODE_PRIVATE).
    getString("key", null);

سيكون من الرائع أن تصل إلى المتغير باستخدام بعض المعالج المحدد مسبقًا ، مثل getString(R.string._key), ، بدلاً من السلسلة المتشددين "key".

يجب أن تمتد تفضيلاتك تفضيل النشاط. ثم تحتاج إلى إنشاء ملف XML مورد للتفضيلات ، والرجوع إلى ذلك في تفضيلك مثل ذلك:

@Override
    protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            addPreferencesFromResource(R.xml.preferences);
            etc.
    }

يجب أن يكون للتفضيلات XML تفضيلات CREEN كعنصر من المستوى الأعلى ، ويمكنك الاستفادة من جميع طرق عرض التفضيلات المختلفة التي توفرها Android لك لإعداد التفضيلات. ستكون هذه الطريقة الأكثر شيوعًا والأنيقة للقيام بذلك.

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