【问题标题】:How do I use SharedPreferences in Xamarin.Android?如何在 Xamarin.Android 中使用 SharedPreferences?
【发布时间】:2014-10-31 06:12:09
【问题描述】:

我想在我的 Xamarin.Android 项目中保存和检索一些应用程序设置。

我知道在 Android (java) 中,我使用类 SharedPreferences 来存储此信息,但我不知道如何将其转换为 Xamarin C#。

当我在 Xamarin Studio IDE 中键入“SharedPreferences”时,没有自动完成功能,所以我不知道该使用什么。


对互联网的初步搜索将我带到了一个相关问题,但只包含 Android java:


总结一下:

  • 什么是 Android Java 的 SharedPreferencesXamarin Android C# 等效项

【问题讨论】:

    标签: android xamarin xamarin.android


    【解决方案1】:

    SharedPreferences 的 Xamarin.Android 等效项是一个名为 ISharedPreferences 的接口。

    以同样的方式使用它,您将能够轻松地跨 Android 代码移植。


    例如,要使用一些Context 保存真/假bool,您可以执行以下操作:

    ISharedPreferences prefs = PreferenceManager.GetDefaultSharedPreferences (mContext);
    ISharedPreferencesEditor editor = prefs.Edit ();
    editor.PutBoolean ("key_for_my_bool_value", mBool);
    // editor.Commit();    // applies changes synchronously on older APIs
    editor.Apply();        // applies changes asynchronously on newer APIs
    

    使用以下方法访问保存的值:

    ISharedPreferences prefs = PreferenceManager.GetDefaultSharedPreferences (mContext);
    mBool = prefs.GetBoolean ("key_for_my_bool_value", <default value>);
    mInt = prefs.GetInt ("key_for_my_int_value", <default value>);
    mString = prefs.GetString ("key_for_my_string_value", <default value>);
    

    从这个示例中,您可以看到,一旦您知道要使用的正确 C# 接口,剩下的就很容易了。有很多 Android java 示例说明如何在更复杂的情况下使用SharedPreferences,并且可以使用ISharedPreferences 轻松移植这些示例。

    有关更多信息,请阅读此主题:

    【讨论】:

    • PreferenceManager.GetDefaultSharedPreferences 已弃用
    【解决方案2】:

    您可以在 Xamarin.Android 中为您使用此示例 SharedPreferences

    首先,你需要使用:

    ISharedPreferences //Interface for accessing and modifying preference data
    ISharedPreferencesEditor // Interface used for modifying values in a ISharedPreferences
    

    你可以创建一个类似的类:

    public class AppPreferences
    {
        private ISharedPreferences mSharedPrefs;
        private ISharedPreferencesEditor mPrefsEditor;
        private Context mContext;
    
        private static String PREFERENCE_ACCESS_KEY = "PREFERENCE_ACCESS_KEY";
            
        public AppPreferences (Context context)
        {
            this.mContext = context;
            mSharedPrefs = PreferenceManager.GetDefaultSharedPreferences(mContext);
            mPrefsEditor = mSharedPrefs.Edit ();            
        }
    
        public void saveAccessKey(string key){
            mPrefsEditor.PutString(PREFERENCE_ACCESS_KEY, key);
            mPrefsEditor.Commit();
        }
    
        public string getAccessKey(){
            return mSharedPrefs.GetString(PREFERENCE_ACCESS_KEY, "");
        }
    }
    

    来自活动:

    Context mContext = Android.App.Application.Context;
    AppPreferences ap = new AppPreferences (mContext);
    

    如果你想保存一些价值:

    string key = "123123";
    ap.saveAccessKey (key);
    

    如果要获取值:

    string key = ap.getAccessKey();
    

    【讨论】:

    • 使用它对我有用。只是想知道,在您的代码中没有处置。所以我想在活动完成后实现一个调用它的 dispose 方法。但是后来我注意到,如果我在处置它的服务中使用该类,则此代码会崩溃,说没有实例。此刻,我注释掉了dispose,但是winder如果内存会泄漏?
    • PreferenceManager.GetDefaultSharedPreferences 已弃用
    【解决方案3】:

    如示例所示,我在使用 PreferenceManager 时遇到了问题。我在顶部添加了这段代码,现在我可以很好地使用它了。

    using Android.Preferences;
    

    加上要获得首选项,您必须添加默认值作为第二个参数,否则它将无法编译

    mInt = prefs.GetInt ("key_for_my_int_value", defaultInt);
    

    【讨论】:

      【解决方案4】:

      不确定您是否仍然不知道,但请确保您处置您的变量(如果它们在函数内):

      prefs.Dispose();
      prefEditor.Dispose();
      

      由于不再需要内存时没有释放内存,我的应用程序在一段时间内发生崩溃/冻结。

      【讨论】:

        猜你喜欢
        • 2015-01-19
        • 2021-03-29
        • 2021-06-13
        • 1970-01-01
        • 1970-01-01
        • 2016-12-30
        • 2020-08-25
        • 2019-08-19
        • 2014-03-30
        相关资源
        最近更新 更多