我只是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上浏览了很多,但似乎没有遇到我需要的风格。任何帮助都会受到高度赞赏。提前谢谢。
答案 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();
}
希望你明白