我正在学习Android开发,而我目前正在开发一款游戏,其中很小的飞屏出现在屏幕上,用户必须单击它们,以使它们消失。但是我的绝望方法只给了我这个错误:java.lang.nullpointerexception:尝试调用虚拟方法'long java.util.date.getTime()'null对象参考
private void removeFlys() {
int number=0;
while(number < playarea.getChildCount()) {
ImageView muecke = (ImageView) playarea.getChildAt(number);
Date birthdate = (Date) muecke.getTag(R.id.birthdate);
long age = (new Date()).getTime() - birthdate.getTime();
if(alter > 2000) {
playarea.removeView(muecke);
} else {
number++;
}
}
}
这是定义生日标签的XML文件
<?xml version="1.0" encoding="utf-8"?>
<resources>
<item name = "birthdate" type ="id" />
</resources>
这是我的代码生成苍蝇
private void spawnFlys() {
int width = playarea.getWidth();
int heigth = playarea.getHeight();
int muecke_width = Math.round(x * 50);
int muecke_heigth = Math.round(x * 42);
int left = randomgenerator.nextInt(width - muecke_width);
int top = randomgenerator.nextInt(heigth - muecke_heigth);
ImageView muecke = new ImageView(this);
muecke.setImageResource(R.drawable.fliege);
muecke.setOnClickListener(this);
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(muecke_width, muecke_heigth);
params.leftMargin = left;
params.topMargin = top;
params.gravity = Gravity.TOP + Gravity.LEFT;
playarea.addView(muecke, params);
muecke.setTag(R.id.birthdate, new Date());
}
这就是Spawnflys方法被称为
的地方private void timer(){
time = time -1;
float randomNumber = randomgenerator.nextFloat();
double probabilitiy = muecken * 1.5;
if(probability > 1) {
spawnFlys();
if(randomNumber < probability -1) {
spawnFlys();
}
} else {
if (randomNumber < probability) {
spawnFlys();
}
}
removeFlys();
updateScreen();
if(!checkGameDone()) {
if(!checkRoundDone()){
handler.postDelayed(this, 1000);
}
}
}
我认为 Date birthdate = (Date) muecke.getTag(R.id.birthdate);
返回null尝试记录它以查看会发生什么
getTag
返回的值始终将是null的,除非您已提前调用setTag
。看来您的布局是父视图中ImageViews
的列表,因此在某个时候,您需要在所有这些ImageView
对象上设置R.id.birthDate
。这样的东西:
for (int i = 0; i < playarea.getChildCount(); i++) {
View muecke = playarea.getChildAt(i);
Date birthdate = getTheDateForThisViewFromSomewhere();
muecke.setTag(R.id.birthDate, birthDate);
}