我想将对象存储在独立存储中。我正在使用Application.Current.Properties
。
问题在于我将静态字符串存储到隔离存储中,如
Application.Current.Properties["EC"] = "10008";
然后它完美地工作但是当我调用service(异步方法)并填充它不会持久存储的对象时。
private async Task CallWebServiceForUserProfile(string EmpCode)
{
try
{
var response = await ServiceLayer.GetResponseFromWebService.GetResponse<ServiceLayer.ServiceClasses.Profile_RootObject>
(ServiceLayer.ServiceURL.UserProfile + "UserId=" + EmpCode);
if (response != null)
{
if (response.Flag == true)
{
objProfile = new Profile();
objProfile.BranchCd = response.PrInfoList[0].BranchCd != null ? response.PrInfoList[0].BranchCd : string.Empty; ;
objProfile.CLBalance = response.PrInfoList[0].CLBalance != null ? response.PrInfoList[0].CLBalance : string.Empty;
objProfile.COFFBalance = response.PrInfoList[0].COFFBalance != null ? response.PrInfoList[0].COFFBalance : string.Empty;
objProfile.Designation = response.PrInfoList[0].Designation != null ? response.PrInfoList[0].Designation : string.Empty;
objProfile.ELBalance = response.PrInfoList[0].ELBalance != null ? response.PrInfoList[0].ELBalance : string.Empty;
objProfile.EmpCode = response.PrInfoList[0].EmpCode != null ? response.PrInfoList[0].EmpCode : string.Empty;
objProfile.EmpName = response.PrInfoList[0].EmpName != null ? response.PrInfoList[0].EmpName : string.Empty;
objProfile.Grade = response.PrInfoList[0].Grade != null ? response.PrInfoList[0].Grade : string.Empty;
objProfile.HOD = response.PrInfoList[0].HOD != null ? response.PrInfoList[0].HOD : string.Empty;
objProfile.HPLBalance = response.PrInfoList[0].HPLBalance != null ? response.PrInfoList[0].HPLBalance : string.Empty;
objProfile.LocCd = response.PrInfoList[0].LocCd != null ? response.PrInfoList[0].LocCd : string.Empty;
objProfile.ReportingTo = response.PrInfoList[0].ReportingTo != null ? response.PrInfoList[0].ReportingTo : string.Empty;
objProfile.Unit = response.PrInfoList[0].Unit != null ? response.PrInfoList[0].CLBalance : string.Empty;
objProfile.Photo = response.PrInfoList[0].Photo != null ? response.PrInfoList[0].Photo : null;
objProfile.Join_Dt = response.PrInfoList[0].Join_Dt != null ? response.PrInfoList[0].Join_Dt : string.Empty;
Application.Current.Properties["UserProfile"] = objProfile;
Application.Current.Properties.Add("UserProfile", objProfile);
Application.Current.Properties["EmployeeCode"] = response.PrInfoList[0].EmpCode != null ? response.PrInfoList[0].EmpCode : string.Empty;
//await Application.Current.SavePropertiesAsync();
}
else if (response.Flag == false)
{
await DisplayAlert(AppResources.LError, response.Message, "OK");
}
}
else
{
await DisplayAlert(AppResources.LError, AppResources.LConnectionError, "OK");
}
}
catch (WebException Exception)
{
await DisplayAlert(AppResources.LError, AppResources.LConnectionError, "OK");
}
}
我想在我的应用程序启动时使用此信息。
Profile objProfile = new Profile();
if (Application.Current.Properties.ContainsKey("UserProfile"))
{
objProfile = Application.Current.Properties["UserProfile"] as Profile;
if (objProfile.EmpCode != null)
{
MyEmployeeId = objProfile.EmpCode;
}
MainPage = new SideMenu();
}
else
{
MainPage = new NavigationPage(new LoginPage());
}
正如您在上面的代码中看到的,我已经使用以下代码来存储数据。
Application.Current.Properties["UserProfile"] = objProfile;
//Application.Current.Properties.Add("UserProfile", objProfile);
Application.Current.Properties["EmployeeCode"] = response.PrInfoList[0].EmpCode != null ? response.PrInfoList[0].EmpCode : string.Empty;
我也试过但不解决我的问题。
await Application.Current.SavePropertiesAsync();
每次登录页面在应用程序启动时打开。
有没有其他方法可以解决这个问题?我不想使用SQLite。
答案 0 :(得分:1)
您需要手动序列化/反序列化您的个人资料对象。
请参阅此链接例如 - https://codemilltech.com/persist-whatever-you-want-with-xamarin-forms/
答案 1 :(得分:0)
有没有其他方法可以解决这个问题?我不想使用SQLite。
存储持久数据需要本机API支持。您可以为商店设置数据注册DependencyService,并在不同平台上实施此服务。
对于Android: 您可以利用ISharedPreference来存储数据。
对于iOS: 您可以使用NSUserDefaults存储应用设置。