2016-11-30 6 views
0

オブジェクトを独立したストレージに保存したい。私は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を使いたくありません。

答えて

0

この問題を解決する方法はありますか?私はSQLiteを使いたくありません。

ストア永続データにはネイティブAPIのサポートが必要です。ストア設定データにDependencyServiceを登録し、このサービスをさまざまなプラットフォームで実装することができます。

Androidの場合: ISharedPreferenceを利用してデータを保存できます。

iOSの場合: NSUserDefaultsを使用してアプリの設定を保存できます。

0

使用Xamarinクロスプラットフォームの設定あなたのプロフィールオブジェクトを手動でデシリアライズ/シリアライズする必要が

関連する問題