无法使用Android中的SharedPreferences增加计数器

时间:2013-12-28 07:39:11

标签: android sharedpreferences counter

我只是Android中的一个新手,我有一个场景,用户可以使用相机拍照,照片将存储在SD卡中。我需要用动态名称保存照片,即我希望图像名称为图像1,图像2等。我最初将计数器值设置为1,因此第一个图像将存储为图像1,下次计数器将增加该值并再次存储。

问题:

我的问题是,每次关闭并重新打开应用程序时,我都无法增加计数器值。我已经尝试了很多,它又将计数器重新设置为1。

代码:

int count;
SharedPreferences.Editor editor = getPreferences(MODE_PRIVATE).edit();
        int defaultValue = getPreferences(MODE_PRIVATE).getInt("count_key",count);
        defaultValue = count;
        editor.putInt("count_value",defaultValue).commit();
        if(count == 1)
        {
            count = 1;
            getPreferences(MODE_PRIVATE).edit().putInt("count_key",count).commit();

        }
        else
        {
             ++count;
            getPreferences(MODE_PRIVATE).edit().putInt("count_key",count).commit();
            count = getPreferences(MODE_PRIVATE).getInt("count_key",count);
            System.out.println("The count value is " + count);
        }

执行时,它每次都将计数值返回1并且似乎不会增加计数值。它应该是我第一次打开它然后2然后依此类推。我的逻辑是否存在问题或者SharedPrefs出错了。我在StackOverFlow上浏览了很多,但似乎没有遇到我需要的风格。任何帮助都会受到高度赞赏。提前谢谢。

4 个答案:

答案 0 :(得分:4)

++count;

将此放在if循环之前,而不是在else循环中。或使用以下代码增加计数

int count = 0;
SharedPreferences.Editor editor = getPreferences(MODE_PRIVATE).edit();
        int defaultValue = getPreferences(MODE_PRIVATE).getInt("count_key",count);
             ++defaultValue;
            getPreferences(MODE_PRIVATE).edit().putInt("count_key",defaultValue).commit();
            count = getPreferences(MODE_PRIVATE).getInt("count_key",count);
            System.out.println("The count value is " + count);

答案 1 :(得分:1)

问题是因为您在for循环范围内增加了 count 变量。所以它产生了一个问题。

所以放

++count;

支持for循环。

答案 2 :(得分:1)

int count;
SharedPreferences.Editor editor = getPreferences(MODE_PRIVATE).edit();
        int defaultValue = getPreferences(MODE_PRIVATE).getInt("count_key",count);
        count = defaultValue+1;  // change this line
        editor.putInt("count_value",defaultValue).commit();
        if(count == 1)
        {
            count = 1;
            getPreferences(MODE_PRIVATE).edit().putInt("count_key",count).commit();

        }
        else
        {

            getPreferences(MODE_PRIVATE).edit().putInt("count_key",count).commit();
            count = getPreferences(MODE_PRIVATE).getInt("count_key",count);
            System.out.println("The count value is " + count);
        }

您尝试将从共享首选项中获取的值放入计数中,但是您使用defaultValue = count;时必须使用count = defaultValue;

更改该值

答案 3 :(得分:1)

int count;   

现在计数值为0, 在那之后++计数它的值变为1.现在低于代码将保持其值始终为1.

if(count == 1)
    {
        count = 1;
        getPreferences(MODE_PRIVATE).edit().putInt("count_key",count).commit();

    }
希望你明白