如何在Xamarin.Android中使用SharedReferences?

如何在Xamarin.Android中使用SharedReferences?,android,xamarin,xamarin.android,Android,Xamarin,Xamarin.android,我想在我的Xamarin.Android项目中保存和检索一些应用程序设置 我知道在Android(java)中,我使用类SharedReferences来存储这些信息,但我不知道如何将其转换为Xamarin C 当我在Xamarin Studio IDE中键入“SharedReferences”时,没有自动完成功能,所以我不知道该使用什么 最初搜索互联网站时,我问了一个相关的问题,但只包含Android java: 因此,总结如下: 什么是Android Java的共享引用的Xama

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

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

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


最初搜索互联网站时,我问了一个相关的问题,但只包含Android java:


因此,总结如下:

  • 什么是Android Java的共享引用的Xamarin Android C#等价物

与Xamarin.Android相当的
SharedReferences
是一个名为
iSharedReferences
的接口

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


例如,要使用某些
上下文保存真/假
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>);

IsSharedReferences prefs=PreferenceManager.GetDefaultSharedReferences(mContext);
mBool=prefs.GetBoolean(“为我的布尔值设置键”);
mInt=prefs.GetInt(“key_表示我的int值)”;
mString=prefs.GetString(“key_表示我的字符串值)”;

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

有关详细信息,请阅读以下线程:


您可以使用此示例在Xamarin.Android中共享引用

首先,您需要使用:

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();

我希望这个示例能帮助您

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

using Android.Preferences;
另外,要获得首选项,您必须添加默认值作为第二个参数,否则它将无法编译

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

不确定您是否仍然不知道,但如果变量位于函数中,请确保您处理变量:

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

一段时间以来,我的应用程序发生了崩溃/冻结,因为每当不再需要内存时,我都不会处理它。

使用它对我来说很有效。只是想知道,在您的代码中没有dispose。因此,我想在完成活动后实现一个dispose方法调用它。但后来我注意到,如果我在处理该类的服务中使用该类,则该代码会崩溃,因为没有实例。目前,我已注释掉了dispose,但无法确定内存是否会泄漏?PreferenceManager.GetDefaultSharedReferences已弃用PreferenceManager.GetDefaultSharedReferences已弃用