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