Xamarin.Forms Android: Save/Store 关于 OnHandleIntent 事件的一些数据

Xamarin.Forms Android: Save/Store some data on OnHandleIntent event

Xamarin.Forms Droid 项目: 如何在 OnHandleIntent 事件上存储一些数据。我正在尝试将数据保存在 Application.Current.Properties 中。应用active/open时没有问题,但应用关闭时数据没有保存。任何帮助,将不胜感激。下面的代码示例:

[Service]
public class GCMIntentService : IntentService
{
    //other methods

    protected async override void OnHandleIntent(Intent intent)
    {
        //Some code for push notification
        Application.Current.Properties.Add("key", "value");
        Application.Current.SavePropertiesAsync();
    }
}

Xamarin.Forms Android: Save/Store some data on OnHandleIntent event

Application.Current.Properties 只是一个对象字典,你可以在其中粘贴任何你想要的东西,包括你自己的 类 ,它将被序列化,属性集合是从文件中读取的,这个是自动完成的。

但是,整个字典在一个文件中一起序列化,读取或反序列化该文件期间的异常将被捕获,只留下一个空的 Properties 集合。

解法:

您可以使用 SharedPreferencesSave/Store 一些数据,如文档所述:

The SharedPreferences class provides a general framework that allows you to save and retrieve persistent key-value pairs of primitive data types. You can use SharedPreferences to save any primitive data: booleans, floats, ints, longs, and strings. This data will persist across user sessions (even if your application is killed).

In Xamarin.Android, You'll need to get the instance of ISharedPreferences and use that to update/change/delete preferences. As Tom Opgenorth said,有几种方法可以获取ISharedPreferences的实例:

  • Activity.GetPreferences

    会得到特定于 activity 的偏好。可能不是你想要的。

  • Context.GetSharedPreferences

    可以获得应用程序级别的首选项。

  • PreferenceManager.DefaultSharedPreferences

    将为您提供给定上下文的 ISharedPreference 实例。

实际保存是由 ISharedPreferencesEditor 的实例完成的,您可以通过调用方法 ISharedPreferencesEditor.Apply() 获得它。这是一个例子:

保存您的数据:

ISharedPreferences prefs = PreferenceManager.GetDefaultSharedPreferences(this);
ISharedPreferencesEditor editor = prefs.Edit();
editor.PutString("number", "Value");
editor.Apply();

恢复您的数据:

ISharedPreferences prefs = PreferenceManager.GetDefaultSharedPreferences(this);
var a = prefs.GetString("number", "null");//"null" is the default value