我是Xamarin的新手。
在我的Xamarin Forms应用程序中,我只希望在满足条件时(即使应用程序在后台)以推送通知的方式通知用户。用户注册时由用户选择条件。
此刻,我使用SQL Lite将选择存储在手机上。
在我的应用中,通知用户的速度至关重要。收到通知后,我必须检查该情况,因此我将用户的选择从本地数据库中拉出来,以查看是否要通知他们,但这可能要花费几秒钟。
是否有一种更快的方法来检索该选择/条件,而不是仅将其存储在本地db文件中的另一种更快的方法? 这些首选项必须在PCL以及Android和iOS项目中的整个应用程序中都可用。
谢谢。
答案 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不需要做任何事情。
还要确保将其安装在所有项目中。
希望它也可以帮助其他人。