NullPointerException:尝试调用虚拟方法';长java.util.Date.getTime()';关于空对象引用

NullPointerException:尝试调用虚拟方法';长java.util.Date.getTime()';关于空对象引用,java,android,Java,Android,我正在学习Android开发,目前我正在开发一款游戏,屏幕上会出现小苍蝇,用户必须点击它们,它们才会消失。但我的解除它们保护的方法只给了我以下错误:java.lang.NullPointerException:尝试对空对象引用调用虚拟方法“long java.util.Date.getTime()” private void removeFlys() { int number=0; while(number < playarea.getChildCount

我正在学习Android开发,目前我正在开发一款游戏,屏幕上会出现小苍蝇,用户必须点击它们,它们才会消失。但我的解除它们保护的方法只给了我以下错误:java.lang.NullPointerException:尝试对空对象引用调用虚拟方法“long java.util.Date.getTime()”

 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++;
            }
        }
    }
这就是调用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);
        }
    }
}
private void timer(){
时间=时间-1;
float randomNumber=randomgenerator.nextFloat();
双重概率=muecken*1.5;
如果(概率>1){
产卵蝇();
if(随机数<概率-1){
产卵蝇();
}
}否则{
if(随机数<概率){
产卵蝇();
}
}
removeFlys();
updateScreen();
如果(!checkGameDone()){
如果(!checkRoundDone()){
handler.postDelayed(这个,1000);
}
}
}

我认为
日期出生日期=(Date)muecke.getTag(R.id.birthdate)
返回null尝试将其注销以查看发生了什么情况除非您事先调用了
setTag
,否则
getTag
返回的值始终为null。似乎您的布局是父视图中的
ImageView
列表,因此在之前的某个时刻,您需要在所有这些
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);
}
for(int i=0;i
R.id.birthdate指的是什么?在添加到
playerArea
之前先设置标签。您在定义之前提供了引用。我在@adnbsr中这样做了,但这无助于我看到这行
double probability=muecken*1.5。你在哪里定义了muecken,你给了它什么值?我在繁殖苍蝇时调用setTag。我编辑了我的问题,并插入了繁殖苍蝇的代码。抱歉,我总是需要一些时间将所有变量从德语翻译成英语。如何登录?我对Android真的很陌生,现在正在读一本初学者的书,这是这本书的代码,它不起作用。。。我试过Log.e(“MyTag”,birthdate),但它需要一个string@JangoCG很抱歉,我没有看到通知,您现在可能已经修复了它。如果没有,则ImageView“muecke”未初始化yet@JangoCG顺便说一句,我不懂muecke,它是
spawnFly()中的一个图像视图
但是你在
double probability=muecken*1.5
的计算中使用了它,谢谢你的帮助,但我放弃了它,把书还给了我。当书中的例子不起作用时,即使它是出版商网站上的“解决方案”代码,也确实令人沮丧。
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);
        }
    }
}
for (int i = 0; i < playarea.getChildCount(); i++) {
    View muecke = playarea.getChildAt(i);
    Date birthdate = getTheDateForThisViewFromSomewhere();
    muecke.setTag(R.id.birthDate, birthDate);
}