NullPointerException:尝试在空对象引用上调用虚拟方法 'long java.util.Date.getTime()'



我正在学习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);
}

最新更新