application.current.properties不会保留xamarin.forms中服务调用(异步方法)的值吗?

时间:2016-11-30 09:59:39

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

我想将对象存储在独立存储中。我正在使用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。

2 个答案:

答案 0 :(得分:1)

您需要手动序列化/反序列化您的个人资料对象。

请参阅此链接例如 - https://codemilltech.com/persist-whatever-you-want-with-xamarin-forms/

答案 1 :(得分:0)

  

有没有其他方法可以解决这个问题?我不想使用SQLite。

存储持久数据需要本机API支持。您可以为商店设置数据注册DependencyService,并在不同平台上实施此服务。

对于Android:   您可以利用ISharedPreference来存储数据。

对于iOS:   您可以使用NSUserDefaults存储应用设置。