オブジェクトを独立したストレージに保存したい。私はApplication.Current.Properties
を使用しています。application.current.propertiesはxamarin.formsのサービスコール(非同期メソッド)からの値を保持しませんか?
問題は、私は
Application.Current.Properties["EC"] = "10008";
のような分離ストレージに静的な文字列を格納したときに、私はサービス(非同期メソッド)を呼び出し、それが永続的に保存されていないオブジェクトを塗りつぶすとき、それは完璧に動作しますが、です。
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を使いたくありません。