0

我正在尝试将字符串保存为SharedPerferences

var prefs = Application.Context.GetSharedPreferences ("Janssen", FileCreationMode.WorldReadable);  

var prefEditor = prefs.Edit ();
prefEditor.PutString ("SecurityToken", SecurityCode.Text);
prefEditor.Commit ();

var prefs = Application.Context.GetSharedPreferences ("Janssen", FileCreationMode.WorldReadable);  

var SecurityToken = prefs.GetString ("SecurityToken", null);

我是来自 iOS 的 Android 新手。我正在尝试NSUserDefaults在 iOS 中进行模拟。我正在阅读SharedPreferences一项新活动,也许这就是导致问题的原因?我不知道。我也不知道将什么设置为默认值。

4

2 回答 2

3

SharedPreferences您是否在编写和阅读它们之间重新部署?这通常会擦掉SharedPreferences.

我刚刚对它们进行了测试,它们在两个之间运行良好Activities

WritePrefsAcitivity.cs

using Android.App;
using Android.Content;
using Android.Widget;
using Android.OS;

namespace Derrrp
{
    [Activity (Label = "Derrrp", MainLauncher = true)]
    public class WritePrefsActivity : Activity
    {
        protected override void OnCreate (Bundle bundle)
        {
            base.OnCreate (bundle);

            SetContentView (Resource.Layout.Write);

            var prefs = Application.Context.GetSharedPreferences("MySharedPrefs", FileCreationMode.Private);
            var prefsEditor = prefs.Edit();

            var ed = FindViewById<EditText>(Resource.Id.editText1);
            ed.AfterTextChanged += (sender, e) => {
                prefsEditor.PutString("MyPref", e.Editable.ToString());
                prefsEditor.Commit();
            };

            Button button = FindViewById<Button> (Resource.Id.myButton);

            button.Click += delegate {
                var intent = new Intent(this, typeof(ReadPrefsActivity));
                StartActivity(intent);
            };
        }
    }
}

ReadPrefsActivity.cs

using Android.App;
using Android.Content;
using Android.OS;
using Android.Widget;

namespace Derrrp
{
    [Activity (Label = "ReadPrefsActivity")]            
    public class ReadPrefsActivity : Activity
    {
        protected override void OnCreate (Bundle bundle)
        {
            base.OnCreate (bundle);

            SetContentView(Resource.Layout.Read);

            var tv = FindViewById<TextView>(Resource.Id.myTextView);
            var button = FindViewById<Button>(Resource.Id.myButton);

            var prefs = Application.Context.GetSharedPreferences("MySharedPrefs", FileCreationMode.Private);

            button.Click += (sender, e) => {
                tv.Text = prefs.GetString("MyPref", "");
            };
        }
    }
}

defValue可以设置为您想要的任何内容。如果您尝试获取的首选项为空,则将选择此值。

注意:如果您使用它来存储一些秘密信息,建议使用FileCreationMode.Private甚至使用使其只能由应用程序读取的东西,例如加密。

GIF 图像显示了这两个活动的工作情况。

于 2013-04-12T13:06:38.377 回答
0

我不确定您遇到的错误是什么,但下面是我之前使用共享首选项保存字符串的示例。我以前将默认值设置为“”,这样在读取时,如果之前没有保存该值,它会将变量设置为空字符串。您可以在任何新活动中读取共享首选项,共享首选项是每个应用程序而不是活动..

例子:

写字符串:

 String pass = "abcdefg";
 SharedPreferences preferences = getSharedPreferences("pref", 0);
 SharedPreferences.Editor editor = preferences.edit();
 editor.putString("savedPass", pass);
 editor.commit();

读取字符串:

 SharedPreferences preferences = getSharedPreferences("pref", 0);
 String mypassword = preferences.getString("savedPass", "");
于 2013-04-12T12:46:53.873 回答