Pourquoi ne montrant un accident en dehors de ma demande Toast de onCreate ()?
-
28-09-2019 - |
Question
vieille question: « Pourquoi le fait de créer un Toast s'écraser ma demande? »
Mon application fonctionne très bien si je ne l'utilise mais si je tartines veux créer et montrer simple Toast comme ceci:
Toast SimpleToast = Toast.makeText(getApplicationContext(), "Just a toast.",Toast.LENGTH_LONG);
SimpleToast.setGravity(Gravity.TOP, 0, 0);
SimpleToast.show();
Je reçois ces lignes dans le journal, puis l'application se bloque:
NotificationService enqueueToast pkg=games.MyAppName callback=android.app.ITransientNotification$Stub$Proxy@49603368 duration=1
ResourceType No package identifier when getting name for resource number 0x00000000
AndroidRuntime Shutting down VM
dalvikvm threadid=3: thread exiting with uncaught exception (group=0x4001b188)
AndroidRuntime Uncaught handler: thread main exiting due to uncaught exception
AndroidRuntime java.lang.NullPointerException
Je l'ai vérifié et revérifié le code ci-dessus est ce qui fait planter. Je suis en cours d'exécution sur l'émulateur que je ne dispose pas actuellement d'un téléphone Android.
La solution
Toutes les caractéristiques qui sont considérés comme « blocage » doivent être créées à l'intérieur d'un fil. Cela inclut les boîtes de dialogue modales, l'écriture aux préférences partagées, l'accès urls et assez curieusement, des messages simples de pain grillé.
Ces choses fonctionnent lorsqu'il est appelé à partir du onCreate de l'activité, mais nécessitent un fil / configuration du gestionnaire pour pouvoir être appelé partout.
Autres conseils
Au meilleur de ma connaissance, vous ne pouvez pas montrer un toast avec un contexte d'application, vous devez montrer avec un contexte d'activité. Le toast est pas lié à votre application, il est lié à l'activité que vous le montrer sur. Au lieu d'utiliser getApplicationContext()
, essayez d'utiliser une variable ctx
nommée contenant une référence à votre activité.
Bonne chance!
Pour une raison quelconque, getApplicationContext renvoie null. Essayez "ActivityName.this" à la place, sur votre méthode onClick (), à l'intérieur du Listener.
@Override
public boolean onTouch(View V, MotionEvent event) {
...
Toast toast = Toast.makeText(V.getContext(), ...
où V est votre vue fonctionnera très bien. Vous pouvez également utiliser appConntext () dans les constructeurs.
Il semble que vous avez essayé de déréférencer un endroit de pointeur NULL, essayez d'enfoncer dans le débogueur et voir où exactement. Il pourrait être l'appel .setGravity
. Cela indiquerait que Toast.makeText
n'a pas créer votre pain grillé. Il faut noter que les pains grillés peuvent être créés et affichés d'une activité ou service.
Enveloppez le code dans un try-catch et vérifiez la trace de la pile sur l'exception qui est levée. Cela ressemble à une méthode de rappel sur une activité est appelée lorsque vous ne vous attendiez pas à.