如何在关闭app时在SharedPreferences c#中保存int?

时间:2016-11-16 23:59:57

标签: c# android xamarin

我希望在应用关闭时保存SharedPreferences中的点击次数。现在我有一个按钮连接的功能

   private void SaveClicks (){
    var prefs = Application.Context.GetSharedPreferences("Name",FileCreationMode.Private);
                 var prefEditor = prefs.Edit();
                 prefEditor.PutInt("Key", nametest);
                 prefEditor.Apply();

    }

"点击"是int的名称,其中我存储了一个按钮中的点击次数

当应用程序关闭时,我会以什么方式自动执行此操作?使用onDestroy将是一个很好的解决方案吗?

//更新 所以我写了那段代码:

protected override void OnDestroy()
        {
            var prefs = Application.Context.GetSharedPreferences("Name", FileCreationMode.Private); // 1
            var prefEditor = prefs.Edit(); // 2
            prefEditor.PutInt("Key", nametest); // 3
            prefEditor.Apply(); // 4


        }

为了计算点击次数,我有类似的东西

var prefs = Application.Context.GetSharedPreferences("Name", FileCreationMode.Private); // 1
            var value1 = prefs.GetInt("key", 0);
            if (clicks + value1 <= 499)
            {
                clicks++;
                textViewBattlepackCount.Text = (clicks + value1).ToString() + " clicks!";
                progressBarName1.Progress = progressBarName1.Progress + 1;
                nametest= clicks + value1;


                if (clicks + value1 == 500)
                {
                    AlertDialog.Builder alertDialog = new AlertDialog.Builder(this);
                    alertDialog.SetTitle("You won!");
                    alertDialog.SetMessage("message");
                    alertDialog.SetNeutralButton("Ok", delegate
                    {

                        alertDialog.Dispose();

                    });
                    alertDialog.Show();

                    clicks = 0;
                    nametest= 0;

                    textViewTXTCount.Text = "0";
                    progressBarName1.Progress = progressBarName1.Progress = 0;

                }

但是onDestroy()中的点击有时只是存储,有一次是正确的数字,但是在kill活动和重启应用之后的另一个时间点击次数很多。我不知道为什么。 对不起混乱的描述

2 个答案:

答案 0 :(得分:1)

这取决于您的要求:

  1. 如果您只是想在活动被杀死时存储点击次数。使用OnDestory()

  2. 如果你想在活动在后台时存储点击次数(例如你按下主页按钮或其他活动开始),请使用onPause();

  3. onSaveInstanceState()也可以在活动销毁之前调用,它可以恢复一些临时数据(例如EditText中的文本)。

答案 1 :(得分:0)

下一个问题。

SharedPreferences&#34; key&#34;当你打电话给onDestory()时应该被覆盖,如果没有,请跟踪你的&#34; nametest&#34;使用debug

BTW

  prefEditor.PutInt("Key", nametest);
  var value1 = prefs.GetInt("key", 0);

请使用相同的&#34; Key&#34; - - !!