2017-04-16 17 views
0

共有設定にアクセスしようとしたときに保存された実際のテキストではなく、デフォルトのテキストが表示されます。私は保存時に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(); 

答えて

1

は個人的に私はActivityからそれをサブクラス化しないだろう( ?).actorを使用してをインスタンス化しますといくつかの変更が加えられて、この例が完成します。

例:

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();'を呼び出すと、 'SomeStringToSave'の代わりに' could not get pref'を取得していますか? – SushiHangover

+0

@MajaOkholmは、通常、私はまったく別のアプローチを使用していると言いました。おそらくあなたはコードをうまく変更しました。私の答えに書いたものを試してみると、私はそれを釘付けにするのか本当に興味があります。 –

関連する問題