Android Xamarin:无法从SharedPreferences中读取
问题描述:
我正在获取默认文本,而不是尝试访问共享首选项时保存的实际文本。我已经测试过,它在保存时返回true,所以我非常确定问题在于从首选项文件中读取。Android Xamarin:无法从SharedPreferences中读取
偏好类
public class SaveWarningMessage : Activity
{
private ISharedPreferences myPref;
private ISharedPreferencesEditor myPrefEditor;
private Context myContext;
public void MyAppPref(Context context)
{
this.myContext = context;
myPref = PreferenceManager.GetDefaultSharedPreferences(myContext);
myPrefEditor = myPref.Edit();
}
public void SaveString(string text)
{
myPrefEditor.PutString("warning text", text);
var returnValue = myPrefEditor.Commit();
}
public string GetString()
{
return myPref.GetString("warning text", "could not get pref");
}
}
}
类储蓄偏好:
string warningText = Intent.GetStringExtra("warningText");
Context mContext = Android.App.Application.Context;
SaveWarningMessage classInstans = new SaveWarningMessage();
classInstans.MyAppPref(mContext);
classInstans.SaveString(warningText);
从偏好的课外阅读:
Context mContext = Android.App.Application.Context;
SaveWarningMessage classInstans = new SaveWarningMessage();
classInstans.MyAppPref(mContext);
string message = classInstans.GetString();
答
个人而言,我不会从Activity
它的子类( ?)并使用.actor
来举例您的ISharedPreferences
,以及您在此示例中最后所做的其他更改。
例子:
public class SaveWarningMessage
{
public const string WARNINGTEXT = "warning text";
ISharedPreferences myPref;
public SaveWarningMessage(Context context)
{
myPref = PreferenceManager.GetDefaultSharedPreferences(context);
}
public void SaveString(string text)
{
var myPrefEditor = myPref.Edit();
myPrefEditor.PutString(WARNINGTEXT, text);
if (!myPrefEditor.Commit())
{
Log.Error("SomeTag", $"Saving {text} to Pref:{WARNINGTEXT} failed");
}
// Or replace the Commit & check of return the following
// if you do not care about checking the return value
// myPrefEditor.Apply();
}
public string GetString()
{
return myPref.GetString(WARNINGTEXT, "could not get pref");
}
}
然后你可以在你这样的:
string warningText = "SomeStringToSave";
SaveWarningMessage classInstans = new SaveWarningMessage(Application.Context);
classInstans.SaveString(warningText);
SaveWarningMessage classInstans2 = new SaveWarningMessage(Application.Context);
string message = classInstans2.GetString();
Log.Debug("SO", message);
您的意见,使有很大的意义,我实施了变化,但它仍然无法正常工作,我现在更加困惑......但是thx –
@MajaOkholm所以当你调用'classInstans2.GetString();'你得到'不能获取pref'而不是'SomeStringToSave'? – SushiHangover
@MajaOkholm说,通常我也使用完全不同的方法,可能你很好地改变了你的代码,尝试我在我的答案中写的东西,我真的很好奇,看看我是否确定了它。 –