/ NSLserDefaults / UserDefaults में पीसीएल में सेव क्लास और Xamarin.iOS / Droid में उपयोग करने के लिए - xamarin, xamarin.ios, mvvmcross

PCL में NSUserDefaults / UserDefaults में कक्षा सहेजें और Xamarin.iOS / Droid में उपयोग करने के लिए - xamarin, xamarin.ios, mvvmcross

मैंने एक लॉगिन सेवा लागू की है और ViewModel में एक वर्ग के रूप में कुछ उपयोगकर्ता से संबंधित डेटा प्राप्त कर रहा है।

अब मैं इस वर्ग को कहीं और बचाना चाहता हूंइसे बाद में एक्सेस करने के लिए। IOS में इसके लिए सबसे अच्छी जगह NSUserDefaults होती। लेकिन मुझे यह ज़मारिन में करना होगा। मैं अपने ऐप में MVVMCross का उपयोग कर रहा हूं और पीसीएल लागू किया है।

उत्तर:

जवाब के लिए 0 № 1

जैसा कि बताया गया है सेटिंग्सप्लगिन ठीक वही करेंगे जो आप चाहते हैं और उपयोग करने के लिए बहुत सरल है। हालांकि, मैंने हमेशा सिर्फ अपनी सेटिंग की है और इस्तेमाल किया है NSUserDefaults अतीत में iOS के लिए 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();
}
}

एंड्रॉयड के लिए:

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();
}
}