Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 仅存储一个选项的SharedReferences if语句_Java_Android - Fatal编程技术网

Java 仅存储一个选项的SharedReferences if语句

Java 仅存储一个选项的SharedReferences if语句,java,android,Java,Android,我对Android开发相当陌生。我最近遇到了一个挑战,基本上是一个带有一系列图像的ViewPager,你可以在它们之间滑动。找到适合自己的图像后,单击底部的按钮存储选择并继续下一个活动(下一个活动有一个后退按钮,允许他们返回并选择另一个图像,如果他们愿意) 由于这是一个离线挑战,我选择使用SharedReferences作为存储此选择的一种方式 我的问题是,我如何将此信息存储一次,如果第二次选择相同的图像,则不会发生任何事情,但如果选择了新图像,则会覆盖上一个图像。我假设它包含if…else语句

我对Android开发相当陌生。我最近遇到了一个挑战,基本上是一个带有一系列图像的ViewPager,你可以在它们之间滑动。找到适合自己的图像后,单击底部的按钮存储选择并继续下一个活动(下一个活动有一个后退按钮,允许他们返回并选择另一个图像,如果他们愿意)

由于这是一个离线挑战,我选择使用SharedReferences作为存储此选择的一种方式

我的问题是,我如何将此信息存储一次,如果第二次选择相同的图像,则不会发生任何事情,但如果选择了新图像,则会覆盖上一个图像。我假设它包含if…else语句,但不太确定如何设置它。下面是我当前在按钮的onClick方法中的代码

public void thatsMeClick(View view) {

    Intent intent = new Intent(MainActivity.this, PhysicalCondition.class);
    startActivity(intent);

    SharedPreferences sharedPreferences = this.getSharedPreferences("com.tabernaster.challengeone",
        Context.MODE_PRIVATE);

    SharedPreferences.Editor editor = sharedPreferences.edit();
    editor.putInt("motivator", viewPager.getCurrentItem());
    editor.apply();

    int myIntValue = sharedPreferences.getInt("motivator", -1);

    Log.i("motivator", Integer.toString(myIntValue));

}

您需要一个
if
语句是正确的。基本上,您将使用相同的
int myIntValue=sharedPreferences.getInt(“激励因素”,-1)检查当前值您已经拥有的代码,但是您会将其移动到
编辑器.putInt
代码上方。像这样:

int myIntValue = sharedPreferences.getInt("motivator", -1);
if(myIntValue != viewPager.getCurrentItem()){
    SharedPreferences.Editor editor = sharedPreferences.edit();
    editor.putInt("motivator", viewPager.getCurrentItem());
    editor.apply();
    myIntValue = sharedPreferences.getInt("motivator", -1);
}

但是,由于您使用的是同一个密钥,因此此代码相当冗余
SharedReferences
将为您处理覆盖操作。

由于SharedReferences不能包含重复的密钥,因此当前设置在您选择同一图像时正确地“不起作用”,在您选择其他图像时正确地“覆盖”。感谢您的回复,我非常感谢。是的,如果声明不是真的必要谢谢你们的回复,我真的很感激!