Android 为什么我的整数总是零?

Android 为什么我的整数总是零?,android,Android,有这么一个简单的问题让我很尴尬,但我不知道我做错了什么。我试着在得分20后解锁关卡。当关卡第一次解锁时,我想给用户一条消息,说“关卡解锁”。我是这样做的: if(firstTimeOne == 0 && currentHighOne.getInt("levelOneHigh", 0) >= 20){ //First time getting a score over 20 Toast.makeText(LevelSelect.this, "U

有这么一个简单的问题让我很尴尬,但我不知道我做错了什么。我试着在得分20后解锁关卡。当关卡第一次解锁时,我想给用户一条消息,说“关卡解锁”。我是这样做的:

if(firstTimeOne == 0 && currentHighOne.getInt("levelOneHigh", 0) >= 20){ //First time getting a score over 20
                Toast.makeText(LevelSelect.this, "Unlocked level two!" +firstTimeOne, Toast.LENGTH_SHORT).show();
                firstTimeOne=1;
            }
问题是,每当用户得分超过20分时,此代码就会执行。。。firstTimeOne变量应该阻止这种情况,对吗?调用此方法后,将其设置为
1
,以防止再次调用。那么,为什么这个方法会被多次调用呢

我在我的类中创建变量
firstTimeOne
,我在其中编写:

int firstTimeOne = 0;
如果你需要我的完整代码,在这里。这表明我在类中而不是在方法中初始化int:

编辑:


好的,我正在尝试SharedReferences,但是在`edit.putInt(“firstInt”,1)上得到一个空指针异常;代码如下:


//如果没有为int赋值,int将为零……对吗?
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u level\u select);
levelTwoButton=(按钮)findViewById(R.id.leveltwo);
SharedReferences currentHighOne=this.getSharedReferences(“levelOneScore”,Context.MODE\u PRIVATE);
如果(currentHighOne.getInt(“levelOneHigh”,0)<20){
levelTwoButton.可设置可点击(错误);
levelTwoButton.setText(“二级已锁定!”);
}否则{
SharedPreferences firstTimeOne=this.getSharedPreferences(“firstTimeOne”,Context.MODE_PRIVATE);//创建共享优先级
if(firstTimeOne.getInt(“firstInt”,5)==5){//检查我是否已经在其中存储了值
edit=firstTimeOne.edit();
edit.putInt(“firstInt”,0);//将默认值设置为0
edit.commit();
}
如果(firstTimeOne.getInt(“firstInt”,0)==0&¤tHighOne.getInt(“levelOneHigh”,0)>=20){//第一次得分超过20分
Toast.makeText(LevelSelect.this,“解锁的二级!”+firstTimeOne,Toast.LENGTH\u SHORT.show();
编辑.putInt(“firstInt”,1);
}
}
}

非常感谢您所做的一切,

您的int变量是
活动
类的成员,您正在活动的
onCreate()
回调中检查它,该回调仅在活动实例化时调用。活动的每个实例都将重新实例化,成员变量将获得其默认值。这和你写的int和你以后读的不一样


如果要在活动实例上持久保存数据,请考虑使用例如../P>,这与数组和字符串有什么关系,就像标记一样吗?您确定每次都使用相同的类实例吗?您可能还希望将

firstTimeOne
保存到您的首选项中。否则,每当活动重新启动时,它将为零。“尽管我认为没有必要”,这是至关重要的,因为您的问题没有说明在哪里或如何声明或初始化
firstTimeOne
,或者在上面的代码运行后会发生什么,或者上面的代码是如何运行的。@JonSkeet感谢我们的回答。您确定每次都使用相同的类实例是什么意思?我没有使用任何物体…让我知道@RuchirBaronia:与您的问题相关的代码必须在您的问题中,而不仅仅是链接。链接会腐烂,使问题及其答案在将来对人们毫无用处,人们不必跟随一些随机链接来帮助你。好吧,所以我尝试共享引用,但在'edit.Putin(“firstInt”,1)上出现空指针异常;代码如下:您的
SharedReferences.Editor edit
未在对其调用
putInt()
的分支中初始化。因此…我该怎么办。我应该在可见范围内创建新对象吗?感谢在调用
edit
上的任何方法之前,确保您正在初始化
edit=SharedReferences.edit()
。例如,在gist中,将初始化从
if
条件向上移动一级,以便对这两个条件都进行初始化。还请注意,后一个块中缺少了一个
commit()
apply()
。好的,谢谢,它起作用了。我已经给你最好的答案打分,并且喜欢你的答案。
   //ints will be zero if they do not have a value assigned to them...right?
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_level_select);

        levelTwoButton = (Button) findViewById(R.id.leveltwo);

        SharedPreferences currentHighOne = this.getSharedPreferences("levelOneScore", Context.MODE_PRIVATE);
        if (currentHighOne.getInt("levelOneHigh", 0) < 20) {
            levelTwoButton.setClickable(false);
            levelTwoButton.setText("Level two is locked!");
        }else{

            SharedPreferences firstTimeOne = this.getSharedPreferences("firstTimeOne", Context.MODE_PRIVATE); //Making a shared pref

            if(firstTimeOne.getInt("firstInt" , 5) == 5) { //Check if I've stored values in it yet
                edit = firstTimeOne.edit();
                edit.putInt("firstInt", 0); //Setting the default as 0
                edit.commit();
            }
            if(firstTimeOne.getInt("firstInt", 0) == 0 && currentHighOne.getInt("levelOneHigh", 0) >= 20){ //First time getting a score over 20
                Toast.makeText(LevelSelect.this, "Unlocked level two!" +firstTimeOne, Toast.LENGTH_SHORT).show();

                edit.putInt("firstInt", 1);
            }
        }
    }