Xamarin.Forms Android:在OnHandleIntent事件中保存/存储一些数据

时间:2017-10-25 19:48:00

标签: c# xamarin.forms xamarin.android intentservice

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

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

1 个答案:

答案 0 :(得分:0)

  

Xamarin.Forms Android:在OnHandleIntent事件中保存/存储一些数据

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

但是,整个字典在文件中被序列化,在读取或反序列化该文件时会出现异常,只留下一个空的Properties集合。

解决方案:

您可以使用SharedPreferences 保存/存储某些数据,正如文档所述:

  

SharedPreferences类提供了一个通用框架,允许您保存和检索原始数据类型的持久键值对。您可以使用SharedPreferences保存任何原始数据:布尔值,浮点数,整数,长整数和字符串。 此数据将在用户会话中保留(即使您的应用程序被终止)。

Xamarin.Android中,您需要获取ISharedPreferences的实例并使用它来更新/更改/删除首选项。正如Tom Opgenorth所述,有两种方法可以获得ISharedPreferences的实例:

  • <强> Activity.GetPreferences

    会获得特定于该活动的偏好。可能不是你想要的。

  • <强> 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