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); 
+0

您的意见,使有很大的意义,我实施了变化,但它仍然无法正常工作,我现在更加困惑......但是thx –

+0

@MajaOkholm所以当你调用'classInstans2.GetString();'你得到'不能获取pref'而不是'SomeStringToSave'? – SushiHangover

+0

@MajaOkholm说,通常我也使用完全不同的方法,可能你很好地改变了你的代码,尝试我在我的答案中写的东西,我真的很好奇,看看我是否确定了它。 –