2017-04-16 3 views
0

Ich erhalte den Standardtext und nicht den tatsächlichen Text, der gespeichert wird, wenn ich versuche, auf eine gemeinsame Einstellung zuzugreifen. Ich habe getestet, dass es beim Speichern wahr zurückgibt, so dass ich ziemlich sicher bin, dass das Problem darin besteht, aus der Einstellungsdatei zu lesen.Android Xamarin: kann nicht von SharedPreferences lesen

Die Präferenz Klasse

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"); 
    } 
} 
} 

Die Klasse den Vorzug zu speichern:

string warningText = Intent.GetStringExtra("warningText"); 

     Context mContext = Android.App.Application.Context; 
     SaveWarningMessage classInstans = new SaveWarningMessage(); 
     classInstans.MyAppPref(mContext); 
     classInstans.SaveString(warningText); 

Die Klasse das Lesen von der Präferenz:

 Context mContext = Android.App.Application.Context; 
     SaveWarningMessage classInstans = new SaveWarningMessage(); 
     classInstans.MyAppPref(mContext); 
     string message = classInstans.GetString(); 

Antwort

1

Persönlich würde ich es nicht aus Activity Unterklasse (?) und verwenden Sie die .actor, um Ihrezu instanziieren, zusammen mit ein paar anderen Änderungen endet dieses Beispiel.

Beispiel:

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"); 
    } 
} 

Dann können Sie Sie es dies wie:

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

Ihre Kommentare sehr viel Sinn macht und ich die Änderungen umgesetzt werden, aber es ist immer noch nicht funktioniert, und ich bin jetzt noch verwirrter ... Aber thx –

+0

@MajaOkholm Also, wenn du 'classInstans2.GetString();] anrufst, bekommst du' 'pref' anstatt' SomeStringToSave'? – SushiHangover

+0

@MajaOkholm sagte, dass ich normalerweise einen völlig anderen Ansatz verwende und dass du wahrscheinlich deinen Code gut verändert hast, versuche, was ich in meiner Antwort geschrieben habe, ich bin wirklich neugierig, ob ich es gefunden habe. –