在本地存储和检索应用程序用户设置/偏好的最快方法是什么?

时间:2018-08-31 00:40:45

标签: xamarin.forms push-notification xamarin.ios xamarin.android

我是Xamarin的新手。

在我的Xamarin Forms应用程序中,我只希望在满足条件时(即使应用程序在后台)以推送通知的方式通知用户。用户注册时由用户选择条件。

此刻,我使用SQL Lite将选择存储在手机上。

在我的应用中,通知用户的速度至关重要。收到通知后,我必须检查该情况,因此我将用户的选择从本地数据库中拉出来,以查看是否要通知他们,但这可能要花费几秒钟。

是否有一种更快的方法来检索该选择/条件,而不是仅将其存储在本地db文件中的另一种更快的方法? 这些首选项必须在PCL以及Android和iOS项目中的整个应用程序中都可用。

谢谢。

4 个答案:

答案 0 :(得分:1)

由于您不需要任何数据结构,因此这种事情最快捷,最简便的方法是Shared preferences

答案 1 :(得分:1)

Xamarin Forms具有内置的Properties词典,可用于存储简单类型

bool myKey;

// retrieve value
if (Application.Current.Properties.Exists("mykey")) {
  myKey = (bool)Application.Current.Properties["mykey"];
}

//set value if it already exists in Dictionary
Application.Current.Properites["mykey"] = myKey;
// or add it if it doesn't
Application.Current.Properties.Add("mykey",myKey);

// properties will auto-save, but you can force save with
await Application.Current.SavePropertiesAsync();

答案 2 :(得分:1)

您可以使用@MichaelMontero提到的SharedPreferences。您需要将其实施到Android / iOS / UWP。然后利用依赖项服务将其检索到您的shared / pcl / netstandard代码。

通过Android的简单实现:

idx = pd.date_range('2011-01-01','2011-12-31')
mux = pd.MultiIndex.from_product([idx, df['ID'].unique()], names=['Date','ID'])
df = df.set_index(['Date','ID']).reindex(mux, fill_value=0)
print (df.head())
               Name  Score Rank
Date       ID                  
2011-01-01 100    0      0    0
           101    0      0    0
2011-01-02 100    0      0    0
           101    0      0    0
2011-01-03 100    0      0    0

由于它们具有不同的实现方式,因此您也可以研究将其实现到iOS / UWP。

答案 3 :(得分:0)

受你们的回答启发,我研究并最终使用了Microsoft的 Xamarin Essentials NuGet软件包。它目前是预发行版本,只有在选中NuGet软件包中的预发行选项以获取解决方案时,您才能看到它。

似乎非常易于使用,到目前为止,PCL和android中都提供了首选项。我还没有尝试过iOS。这是链接:

https://docs.microsoft.com/en-us/xamarin/essentials/?context=xamarin/xamarin-forms

您要做的所有存储键值对的操作是:

private void SaveUserPreferences (string value1, string value2, string value3)
        {
            Preferences.Set("Key1",value1);
            Preferences.Set("Key2",value2);
            Preferences.Set("Key3",value3);
            ...............................
        }

为了在添加“使用Xamarin.Essentials”之后在类中检索它们 (例如,在您的Android项目中)

var preferenceValue = Preferences.Get("key", "defaultValueIfNotExists");

要安装Android版,请确保将其添加到所有Activity类中。 例如在MainActivity.cs中:

protected override void OnCreate(Bundle bundle) 
{
    //...
    base.OnCreate(savedInstanceState);
    Xamarin.Essentials.Platform.Init(this, bundle); // add this line to your code
}

iOS不需要做任何事情。

还要确保将其安装在所有项目中。

希望它也可以帮助其他人。