2013-03-08 4 views
-2

J'avais une question précédente similaire à mon problème actuel, et c'était quand j'ai récupéré des valeurs nulles de mes tableaux de chaînes, maintenant mon problème est que je pense que je reçois également des valeurs nulles de mes tableaux integer, mais je ne sais pas comment gérer une telle exception, par exemple:NullPointerException pour Android Java

for int(i=0;i<n;i++) 
    { 
     if(taskArr[i] != null){ 
     taskArr[i] = taskArray[i].getText().toString(); 
     taskId[i] = taskArray[i].getId(); 
    } 
    } 

le if(taskArr[i] != null) a résolu mon problème pour obtenir des valeurs nulles de mon tableau de chaînes, mais il ne semble pas travailler sur mes tableaux entier compris. taskArr [] est mon tableau de chaînes, taskId [] est mon tableau integer et taskArray [] est un tableau edittext

+0

Un tableau d'entiers ne peut pas contenir de valeurs nulles (sauf si vous avez utilisé Integer [] au lieu de integer []). Si ce sont des tableaux d'entiers, comment cela fonctionne-t-il? 'taskArray [i] .getText()' – Simon

+0

désolé j'ai oublié de mentionner que taskArray [] est un tableau edittext –

+0

Ne mentionnez pas seulement cela dans les commentaires, éditez la question et ajoutez-la. – m0skit0

Répondre

0

En effet, un int ne peut pas être null, mais une boîte Integer. Je suppose que votre taskArray.getId() renvoie Integer, mais taskId est int[]. Ainsi, vous diffusez directement à int, qui échouera si le Integer est . Cette ligne

taskId[i] = taskArray[i].getId(); 

est équivalent à

taskId[i] = taskArray[i].getId().intValue(); 

Qu'est-ce qui se passe ici si taskArray[i].getId() est nul?

Vous devez obtenir un Integer, vérifier si elle est null, puis attribuer à un int si vous voulez, si ce n'est pas null. Par exemple:

Integer id = taskArray[i].getId(); 
if (id != null) { 
    taskId[i] = id; 
} 
+0

Je l'ai essayé mais je reçois toujours une force proche D: –

2

L'instruction conditionnelle if ne s'applique qu'à la première ligne dont vous avez besoin pour utiliser des parenthèses. En général, c'est une bonne pratique d'utiliser des parenthèses avec vos instructions if, cela rend les choses plus intuitives et vous évite de rencontrer des erreurs comme celle-ci. Vous devrez également vérifier que getText() n'est pas null.

for int(i=0;i<n;i++) 
    { 
     if(taskArr[i] != null && taskArr[i].getText() != null) 
     { 
      taskArr[i] = taskArray[i].getText().toString(); 
      taskId[i] = taskArray[i].getId(); 
     } 
    } 

D'un côté vous avez mentionné que noter votre tableau contenu Integer objets. Je ne vois pas Integer.getText() ou Integer.getId() sur la documentation de l'API pour Integer est un autre type étant stocké dans le tableau?

+0

même avec les accolades je reçois une erreur nullpointerexception): –

+0

@AnthonyWu Cest parce que getText() pourrait être nul, je pensais que vous utilisiez un tableau Integer à partir de vos questions, je vais mettre à jour. –

+0

@AnthonyWu vérifier ma réponse, je pense que c'est votre problème. Vous devriez donner plus de détails dans votre question, comme la pile complète. – m0skit0

0

Vous devez avoir à la fois les lignes fermées dans if état:

if(taskArr[i] != null) 
{ 
    taskArr[i] = taskArray[i].getText().toString(); 
    taskId[i] = taskArray[i].getId(); 
} 
0

S'il vous plaît utiliser accolades ({}) dans votre si clause. Si vous ne le faites pas, juste la ligne sous la condition est reconnue:

if(taskArr[i] != null) { 
    taskArr[i] = taskArray[i].getText().toString(); 
    taskId[i] = taskArray[i].getId(); 
} 
0

Eh bien, vous vérifiez si taskArr est vide, essayez d'extraire une valeur de taskId. Il est possible taskId est null, ou au moins la valeur de cela. Vous devez vérifier cela également.

Essayez ceci:

for int(i=0;i<n;i++) 
{ 
    if(taskArray[i].getText() != null) //Check if Text from taskArray[i] is null 
     taskArr[i] = taskArray[i].getText().toString(); 
    if(taskArray[i].getId != null) //Check if ID from taskArray[i] is null 
     taskId[i] = taskArray[i].getId(); 
} 
+0

J'ai essayé si (taskId [i]! = Null mais le code obtient une erreur de syntaxe –

+0

@Anthony Wu Désolé j'ai oublié quelque chose. Pouvez-vous essayer ce code? – Joetjah

+0

Je reçois toujours une erreur de syntaxe pour cela –

1

Vous avez dit:

je suis toujours obtenir une erreur de syntaxe pour cela ...

Ce n'est pas valide Java:

for int(i=0;i<n;i++) { 
} 

Il devrait être:

for (int i = 0; i < n; i++) { 
} 

Pour le reste, si vous nous avez dit exactement quelle ligne NPE était jeté Sur, nous pourrions probablement vous dire ce que cela provoque. Vous semblez ce qui implique qu'il est cette ligne:

taskId[i] = taskArray[i].getId(); 

Si tel est le cas, et si taskId et taskArray ont des types int[] et EditText[] alors il y a 3 possibilités:

- `taskId` is `null`, 
- `taskArray` is `null`, or 
- `taskArray[i]` is `null`. 

Si nous supposons que la ligne précédente:

taskArr[i] = taskArray[i].getText().toString(); 

ne pas jeter un NPE, qui élimine deux possibilités, laissant taskId comme le coupable.


L'autre commentaire que je veux faire est que tous ces tests pour éviter à nulls est très probablement une mauvaise approche de NPE. Vous devriez savoir d'où viennent ces valeurs null et changer la logique du reste du code pour que cela n'arrive pas.