【问题标题】:Sharepreference to store int valueSharedpreferences 存储 int 值
【发布时间】:2020-06-26 02:26:10
【问题描述】:

我有int 值,当我们单击警报对话框的正或负按钮时,我希望它增加 1,并且即使用户关闭应用程序也存储 int 值。我已经完成了这些,但我不知道为什么这不起作用。

int counter;

在oncreate中

initA();
private void initA(){

if(getCounter() < 1)
{makeAlertDialogOther();}
}
private void makeAlertDialogOther() {
        new AlertDialog.Builder(getActivity())
                .setMessage(Constant.SETTINGS.getEntranceMsg())
                .setCancelable(false)
                .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        counterU();

                    }
                })
                .setPositiveButton("Update", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        counterU();
                    }
                })
                .show();
    }

这是我设置共享偏好的地方:

 private void counterU() {
        sp = getActivity().getSharedPreferences("MyPrfs", Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = sp.edit();
        int oldCounter = sp.getInt("counterValue", 0);
        editor.putInt("counterValue", oldCounter + 1);
        editor.apply();
    }
private int getCounter() {
        sp = getActivity().getSharedPreferences("MyPrfs", Context.MODE_PRIVATE);
        return sp.getInt("counterValue", 0);
    }

【问题讨论】:

  • @PhanVanLinh 我这样做了,但它没有存储计数器值
  • 你应该用counter++替换这个counter = counter++;。它会工作
  • @PhanVanLinh 我也这样做了,还是不行。
  • 我会做同样的测试然后告诉你结果
  • 请告诉我们您得到的结果。澄清你所说的不工作是什么意思。

标签: android android-studio sharedpreferences


【解决方案1】:

您的代码不起作用的原因:每当您再次关闭并打开屏幕时,您就会开始再次将新的计数器值(从 0 开始)保存到您的 SharedPreferences
解决方案:每当我们开始将一个计数器保存到SharedPreferences 时,我们首先获取SharedPreferences 中计数器的旧值,然后增加并保存回来。

private void initA() {
     if(getCounter() < 1) {
        makeAlertDialogOther();
     }
}

private void makeAlertDialogOther() {
    new AlertDialog.Builder(getActivity())
        .setMessage(Constant.SETTINGS.getEntranceMsg())
        .setCancelable(false)
        .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                counterU();
            }
        })
        .setPositiveButton("Update", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                counterU();
            }
        })
        .show();
}

private void counterU() {
    sp = getActivity().getSharedPreferences("MyPrfs", Context.MODE_PRIVATE);
    SharedPreferences.Editor editor = sp.edit();
    int oldCounter = sp.getInt("counterValue", 0);
    editor.putInt("counterValue", oldCounter + 1);
    editor.apply();
}

private int getCounter() {
    sp = getActivity().getSharedPreferences("MyPrfs", Context.MODE_PRIVATE);
    return sp.getInt("counterValue", 0);
}

【讨论】:

  • 它没有用。我已经用这个包裹了它,if (counter &lt; Integer.parseInt(Constant.SETTINGS.getEntranceCode())) {makeAlertDialogOther()} 其中Integer.parseInt(Constant.SETTINGS.getEntranceCode()) 的值为 1。但是,当我稍后单击并关闭应用程序并再次打开它时,actiondialogue 仍然显示
  • 哦,你的意思是我应该用 `int counter;' 替换这个 'int counter = 0;`在顶部?让我再试一次
  • 是的,这就是问题所在,因为每当您再次关闭和打开活动时,此计数器总是 = 0
  • 从您的代码中,我将int counter = sp.getInt("counterValue", Context.MODE_PRIVATE); 更改为counter = sp.getInt("counterValue", Context.MODE_PRIVATE); 并将int counter; 放在顶部,因为我应该在if 条件下获得计数器值,正如我上面评论的那样。但是,当我稍后单击并关闭并再次打开应用程序时,警报对话框仍然显示。要手动测试它,我将 counter=1;它没有显示警报对话框。但是我想在单击取消或更新时增加它的值:(
  • 我在我的设备上进行了测试,它按预期工作。我只是在我的代码中添加了 1 个 Log (Log.i("TAG", "counter = "+counter)),您可以将它放入您的代码中并再次测试以查看计数器是否可以增加值
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-10-06
  • 2017-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-12
相关资源
最近更新 更多