我对Android Studio有问题。我正在尝试做一个非常简单的应用程序,但是在我的手机(Galaxy S8)上,它总是给我同样的错误。我使用两台计算机,在家里和学校都可以做到。当我使用模拟器时,一切都很好。
答案 0 :(得分:0)
尝试以下防御性编程代码。这样可以避免NPE问题,但根本原因是:
您应该使用某些“设计模式”来重构游戏代码(请尝试使用MVC)。您不应基于TextView字符串值来进行游戏逻辑决策。
某些UI树节点可能已在循环内更改。
public boolean checkEndOfGame(LinearLayout cartes, LinearLayout piles){
if(nbCartes == 0){
return true;
}
for (int i=0; i< piles.getChildCount(); i++){
LinearLayout sorte = (LinearLayout)piles.getChildAt(i);
for(int j=0; j< sorte.getChildCount(); j++){
View sorteChild = sorte.getChildAt(j);
if(sorteChild instanceof ConstraintLayout){
ConstraintLayout pile = (ConstraintLayout)sorteChild;
if(0 == pile.getChildCount) {
Log.e("TAG", "pile's child count = 0 ");
continue; //or break ?
}
View pileChild = pile.getChildAt(0);
if(pileChild instanceof TextView) {
TextView textePile = (TextView) pileChild;
int noPile = Integer.valueOf(textePile.getText());
for(int k=0; k< cartes.getChildCount(); k++){
View cartesChild = cartes.getChildAt(i);
if(cartesChild instanceof LinearLayout) {
LinearLayout rangee = (LinearLayout)cartesChild;
for(int l=0; l< rangee.getChildCount(); l++){
View carteChild = rangee.getChildAt(l);
if(carteChild instanceof ConstraintLayout) {
ConstraintLayout carte = (ConstraintLayout)carteChild;
View tv = carte.getChildAt(0);
if(tv instanceof TextView) {
TextView texteCarte = (TextView) tv;
int noCarte = Integer.valueOf(texteCarte.getText());
if(i>0){ //UP
if(noCarte>noPile){
return false;
}
}else{ //DOWN
if(noCarte<noPile){
return false;
}
}
}
}
}
}
}
}
}
}
}
return true;
}