De temps en temps, je reçois un NPE
dans une application que j'ai publiée sur le Play Store et j'aimerais enregistrer des informations supplémentaires afin de mieux comprendre ce qui ne va pas.
Par conséquent, j'ai suivi ce guide de Fabric pour des rapports améliorés en espérant que je le ferai voir la valeur d'une variable que je consigne dans la trace de la pile.
Voici le code que j'ai utilisé:
id = table.getId(); // <------ line that throws NPE Crashlytics.log("userIsOnline: " + isOnline); // <----- variable I want to know it's value
Aujourd'hui, j'ai obtenu la trace de la pile de deux plante mais aucune variable n'a été enregistrée. N'est-ce pas ainsi que je dois le consigner ou y a-t-il autre chose que je n'ai pas compris?
3 Réponses :
Vous pouvez utiliser FirebaseAnalytics
pour un événement de journal lors d'un crash. Vous pouvez l'utiliser pour consigner des événements avec la méthode logEvent ()
.
L'exemple suivant montre comment consigner un événement SELECT_CONTENT suggéré:
val params = Bundle() params.putString("image_name", name) params.putString("full_text", text) firebaseAnalytics.logEvent("share_image", params)
Vous pouvez enregistrer vos propres événements personnalisés comme indiqué dans cet exemple:
val bundle = Bundle() bundle.putString(FirebaseAnalytics.Param.ITEM_ID, id) bundle.putString(FirebaseAnalytics.Param.ITEM_NAME, name) bundle.putString(FirebaseAnalytics.Param.CONTENT_TYPE, "image") firebaseAnalytics.logEvent(FirebaseAnalytics.Event.SELECT_CONTENT, bundle)
J'espère que l'exemple ci-dessus vous aidera.
Mais avec ce code, j'enregistre tout le temps ces données, non? Je veux me connecter uniquement pendant un événement de plantage.
À droite, vous pouvez enregistrer un événement lorsque votre panne se produit.
id = table.getId (); // <------ ligne qui lance NPE Crashlytics.log ("userIsOnline:" + isOnline);
ici vous pouvez trouver le gestionnaire de crash personnalisé stackoverflow.com/ questions / 25203616 /…
Mais quand la ligne avec table.getId ()
ne lance pas, j'obtiens toujours un événement
Avez-vous utilisé try .. catch block?
non. J'essaierai d'ajouter un try..catch. Merci pour votre réponse + le lien
Je suis un peu occupé en ce moment et je ne peux pas rejoindre le chat. Je vais essayer d'ajouter un try..catch et l'autre réponse à ma question d'un autre utilisateur et je reviendrai plus tard avec mes conclusions. Merci beaucoup pour votre temps, vos réponses et votre volonté d'aider :)
Comme le dit la documentation officielle
Crashlytics.log ()
n'écrira que dans le rapport d'erreur Crashlytics.
Utilisez-le ci-dessus id = table.getId ();
et vérifiez les données dans l'onglet Non fatals de Fabric.
Log non-fatal exceptions In addition to automatically reporting your appâs crashes, Crashlytics lets you log non-fatal exceptions. On Android, that means you can log caught exceptions in your appâs catch blocks: try { methodThatThrows(); } catch (Exception e) { Crashlytics.logException(e); // handle your exception here }