/ / Uložiť triedu v NSUserDefaults / UserDefaults v PCL a použiť ju v Xamarin.iOS / Droid - xamarin, xamarin.ios, mvvmcross

Uložiť triedu v NSUserDefaults / UserDefaults v PCL a použiť ju v Xamarin.iOS / Droid - xamarin, xamarin.ios, mvvmcross

Implementoval som prihlasovaciu službu a získavam niektoré údaje súvisiace s používateľmi ako trieda v ViewModel.

Teraz chcem niekde uložiť túto triedu a chcieťneskôr k nej získať prístup. V systéme iOS by najlepším miestom bolo NSUserDefaults. Ale musím to urobiť v Xamarin. Vo svojej aplikácii používam MVVMCross a mám implementovaný PCL.

odpovede:

0 pre odpoveď č. 1

Ako už bolo spomenuté NastaveniaPlugin urobí presne to, čo chcete, a jeho použitie je veľmi jednoduché. Aj keď som si vždy iba urobil svoje vlastné nastavenie a použil som ho NSUserDefaults pre iOS v minulosti s Newtonsoft.Json.

public class iOSSettings : ISettings
{
public ViewModel CurrentViewModel
{
get { return DeserializeSetting<ViewModel>("CurrentViewModel"); }
set { SerializeSetting("CurrentViewModel", value); }
}

private static T DeserializeSetting<T>(string key)
where T : class
{
string json = NSUserDefaults.StandardUserDefaults.StringForKey(key);
if (string.IsNullOrEmpty(json))
return null;
return JsonConvert.DeserializeObject<T>(json);
}

private static void SerializeSetting(string key, object value)
{
if (value == null)
{
NSUserDefaults.StandardUserDefaults.SetString(string.Empty, key);
}
else
{
NSUserDefaults.StandardUserDefaults.SetString(JsonConvert.SerializeObject(value), key);
}
}

public void Save()
{
NSUserDefaults.StandardUserDefaults.Synchronize();
}
}

Pre systém Android:

public class AndroidSettings : ISettings
{
private readonly Context _context;
private ISharedPreferences _preferences;
private ISharedPreferencesEditor _editor;

public AndroidSettings(Context context)
{
_context = context;
}

public ViewModel CurrentViewModel
{
get { return GetObject<ViewModel>("CurrentViewModel"); }
set { Put("CurrentViewModel", value); }
}

public void Save()
{
//Commit changes and dispose
if (_editor != null)
{
_editor.Commit();
_editor.Dispose();
_editor = null;
}
if (_preferences != null)
{
_preferences.Dispose();
_preferences = null;
}
}

private T GetObject<T>(string key)
where T : class
{
//Use a local instance of preferences for "Get"
using (var preferences = PreferenceManager.GetDefaultSharedPreferences(_context))
{
string json = preferences.GetString(key, string.Empty);
if (string.IsNullOrEmpty(json))
return null;
return JsonConvert.DeserializeObject<T>(json);
}
}

private void Put(string key, object value)
{
CheckPreferences();

_editor.PutString(key, JsonConvert.SerializeObject(value));
_editor.Commit();
}

private void CheckPreferences()
{
//Create preferences & editor if needed
if (_preferences == null)
_preferences = PreferenceManager.GetDefaultSharedPreferences(_context);
if (_editor == null)
_editor = _preferences.Edit();
}
}