2017-04-16 1 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에서 하위 클래스 않을 것이다 (?) 을 사용하여를 인스턴스화하십시오., 몇 가지 다른 변경 사항과 함께이 예제로 끝납니다.

예 : 다음

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 pref get 얻을 수 있습니까? – SushiHangover

+0

@MajaOkholm은 대개 완전히 다른 접근법을 사용하고 있다고 말했습니다. 아마도 코드를 잘 바꾸었을 것입니다. 제 대답에 쓴 것을 시도해 보겠습니다. 내가 그것을 못 박았는지 정말 궁금합니다. –

관련 문제