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が初めてです。NSUserDefaultsiOSでエミュレートしようとしています。新しいアクティビティでを読んでいますSharedPreferencesが、それが問題の原因でしょうか? 私はわかりません。また、デフォルト値として何を設定すればよいかわかりません。

4

2 に答える 2

3

SharedPreferences書き込みと読み取りの間に再展開していますか? これにより、多くの場合、SharedPreferences.

私はそれらをテストしたところ、2つの間で正常に動作しますActivities:

WritePrefsActivity.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している場合は、暗号化など、アプリケーションでのみ読み取り可能にするものを使用することをお勧めします。

2 つのアクティビティの動作を示す 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 に答える