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