Я наше приложение, у нас есть класс с настройками приложения, в котором хранятся определенные данные. Короткая версия этого класса выглядит следующим образом:
public class AppPreferences
{
private ISharedPreferences mSharedPrefs;
private ISharedPreferencesEditor mPrefsEditor;
private Context mContext;
public AppPreferences(Context context)
{
this.mContext = context;
mSharedPrefs = PreferenceManager.GetDefaultSharedPreferences(mContext);
mPrefsEditor = mSharedPrefs.Edit();
}
public void SaveAutoLogIn(bool autologindone)
{
mPrefsEditor.PutBoolean(AUTOLOGIN, autologindone);
mPrefsEditor.Commit();
}
public bool GetSaveAutoLogIn()
{
return mSharedPrefs.GetBoolean(AUTOLOGIN, false);
}
public void saveLocationPermissionGranted(bool granted)
{
mPrefsEditor.PutBoolean(LOCATIONPERMISSION, granted);
mPrefsEditor.Commit();
}
public void savePermissionGranted(bool granted)
{
mPrefsEditor.PutBoolean(PERMISSIONS, granted);
mPrefsEditor.Commit();
}
}
Но вместо того, чтобы постоянно создавать экземпляры этого класса в каждой деятельности, в которой он необходим, я решил создать одноэлементный класс (Shorted):
class Preferences : AbstractPreferences<Preferences>
{
// öffentliche Felder und Methoden
public string usernameKey { get; set; }
public string emailKey { get; set; }
public int numberOfNews { get; set; }
public bool locationpermission { get; set; }
public int numberofnewschats { get; set; }
AppPreferences ap;
private Preferences()
{
}
public void GetPreferences(Context mContext)
{
ap = new AppPreferences(mContext);
this.usernameKey = ap.getUsernameKey();
this.emailKey = ap.getEmailKey()
}
public void DeletePreferences()
{
ap.deletePreferences();
}
public void DeleteTutorialPrefs()
{
ap.deleteTutorialPrefs();
}
public void SetPreferencesDeviceID(string key)
{
ap.saveDeviceID(key);
}
}
Хорошо, в общем, этот класс, который наследуется от:
public abstract class AbstractPreferences<T> where T : class
{
// Lazy Instanziierung
private static readonly Lazy<T> _instance = new Lazy<T>(() => CreateSingletonInstance());
public static T Instance
{
get
{
// throw new System.InvalidOperationException("out");
return _instance.Value;
}
}
private static T CreateSingletonInstance()
{
// Konstruktion des Singleton-Objekts
return Activator.CreateInstance(typeof(T), true) as T;
}
}
}
Теперь создает экземпляры всех настроек приложения одновременно, а затем устанавливает их для объекта, подобного:
Preferences.Preferences prf = Preferences.Preferences.Instance;
prf.GetPreferences(mContext);
Это было не нужно, поскольку любой другой способ вызывал сбой настроек приложения. Но вот проблема:
Я не могу установить какие-либо префы. Извлечение их работает просто отлично - но когда я устанавливаю значение, например, bool, установленный на true, - после того, как я получаю только это значение, я получаю взамен значение по умолчанию (false). Я отлаживал это, насколько мог. Когда я в первом классе (AppPreferences), я вижу, что правильное значение переносится в конечную функцию: Например:
public void SaveAutoLogIn(bool autologindone)
{
mPrefsEditor.PutBoolean(AUTOLOGIN, autologindone);
mPrefsEditor.Commit();
}
Но после извлечения значения из функции, которую я никогда не получал, было установлено его значение. Я знаю, это сложная проблема, но мне очень нужна помощь ваших парней. Я надеюсь, что вы можете помочь мне! Большое спасибо!