-2
votes

Pourquoi dois-je obtenir NullPointerException avec ce code?

J'ai une activité et que je reçois une nullpointerException sur la dernière ligne de la méthode cliquée xxx

J'ai supprimé une partie du code pour le garder bref mais le problème est le "IT" La liste est accessible dans la méthode OnResponse, mais donne une nullpointerException dans la méthode cliquée.

Qu'est-ce qui cause cela et comment puis-je stocker la liste à utiliser en dehors de la méthode OnResponse?


2 commentaires

De plus, lorsque vous avez une exception , incluez toujours la trace de la pile et mettez en surbrillance la (s) ligne (s) provoquant l'exception. Et vous voudrez peut-être apprendre Comment déboguer votre programme .


@Carcigenicate, onResponse est appelé de l'intérieur cliqué, avant d'avoir l'exception


4 Réponses :


0
votes

dans cliqué sur Vous appelez getcompany où vous définissez un rappel où il est défini. Le problème est que OnResponse sera convoqué très probablement un certain temps après cela et apicall.setCallback reviendra immédiatement. Donc, getcompany retourne immédiatement et IT sera toujours null lorsque vous essayez d'y accéder.

Tout ce que vous voulez faire après doresponse est appelé, il doit être initié dans doresponse . Comment faire cela dépend de l'étui d'utilisation réel qui n'est pas clair avec votre exemple, mais peut-être que mon explication vous aide à avoir des idées pour vous-même. Sinon, commencez une nouvelle question ici avec plus de détails (nouvelle question car elle n'a rien à voir avec NullPointerExceptions).


1 commentaires

Ok merci pour la réponse. Je suppose que je peux faire ce que je veux faire à Onresponse, je voulais juste stocker la liste de l'activité d'abord



1
votes

Parce que vous essayez d'obtenir la taille de la liste avant de l'initialiser. dans INTEGER.TOSTRING (IT.SIZE ());
parce que ce n'est pas encore initialisé GetCompany (s); est la méthode asynchrone Essayez de supprimer Integer.tostring (it.size ());
parce que chez non utilisé et non utile. La principaactivité de la classe publique étend l'appcCompatiactivité { xxx


1 commentaires

Oui, je sais que ce n'est pas utilisé et ce n'est pas utile. Je veux stocker la liste dans l'activité. Cette ligne était juste pour voir si la liste existe, ce qu'elle ne le fait pas. De plus, je peux utiliser la liste informatique de la méthode OnResponse avant la ligne en question.



0
votes

Je vais aller directement avec une solution possible pour vous qui vous donnent un exemple rapide d'une interface xxx pré>

pourquoi votre code ne fonctionne pas: p>

    public void clicked(View view) {
        // this method is gonna set "it" in the block of code in onResponse, which will happens after you call Integer.toString probably in a separate thread
        getCompany(s);
        Integer.toString(it.size());  
    }


1 commentaires

Merci pour ça. Les interfaces semblent être la solution à beaucoup de problèmes que j'ai rencontrés avec Android. Je vais essayer demain



0
votes

Une nullpointException se produit lorsque vous essayez d'utiliser une variable NULL (ou une variable qui n'a pas été initialisée).

Même si OnResponse () est appelé à partir de l'intérieur cliqué () , vous devez vous rappeler que OnResponse est dans un appel asynchrone. Cela signifie simplement qu'il n'est pas garanti que OnResponse finirait d'exécuter avant cliqué () est appelé.

Je suggérerais d'ajouter ineeger.tostring (it.size ()) à votre OnResponse () méthode.

J'espère que cela vous aidera. Diffuser non plus ;-) Joyeux codage!


1 commentaires

Merci pour la réponse mais ça ne m'aidait pas. Je veux stocker la liste dans l'activité. Je n'appellais que la méthode de taille pour voir si la liste existait.