Pour des raisons de débogage, je souhaite répertorier tous les extras (et leurs valeurs) d'une intention. Maintenant, obtenir les clés n'est pas un problème
Set<String> keys = intent.getExtras().keySet();
mais obtenir les valeurs des clés en est une pour moi, car certaines valeurs sont des chaînes, d'autres sont booléennes ... Comment pourrais-je obtenir les valeurs dans une boucle (parcourir les clés en boucle) et écrire les valeurs dans un fichier journal? Merci pour tout indice!
android
android-intent
stefan.at.wpf
la source
la source
if (bundle == null) { return; }
FTWBundle bundle = data.getExtras();
Oùdata
est l'intention. Pour les débutants Android.value = "null"
.C'est ainsi que je définis la méthode utilitaire pour vider tous les extras d'une intention.
la source
Vous pouvez le faire en une seule ligne de code:
Il produit quelque chose comme:
"#Intent; action = android.intent.action.MAIN; category = android.intent.category.LAUNCHER; launchFlags = 0x10a00000; component = com.mydomain.myapp / .StartActivity; sourceBounds = 12% 20870% 20276% 201167; l .profile = 0; end "
À la fin de cette chaîne (la partie que j'ai mise en gras), vous pouvez trouver la liste des extras (un seul supplémentaire dans cet exemple).
Ceci est conforme à la documentation de toUri : "L'URI contient les données de l'intention en tant qu'URI de base, avec un fragment supplémentaire décrivant l'action, les catégories, le type, les indicateurs, le package, le composant et les extras."
la source
la source
La méthode get (String key) de Bundle renvoie un objet. Votre meilleur pari est de faire tourner l'ensemble de clés en appelant get (String) sur chaque clé et en utilisant toString () sur l'objet pour les sortir. Cela fonctionnera mieux pour les primitives, mais vous pouvez rencontrer des problèmes avec des objets qui n'implémentent pas de toString ().
la source
la source
Je voulais un moyen de sortir le contenu d'une intention dans le journal et de pouvoir le lire facilement, alors voici ce que j'ai trouvé. J'ai créé une
LogUtil
classe, puisdumpIntent()
j'ai pris la méthode créée par @Pratik et l'ai légèrement modifiée. Voici à quoi tout cela ressemble:J'espère que cela aide quelqu'un!
la source
Vous pouvez utiliser
for (String key : keys) { Object o = get(key);
pour renvoyer un objet, l'appelergetClass().getName()
pour obtenir le type, puis faire un ensemble de choses de type if name.equals ("String") pour déterminer la méthode que vous devez réellement appeler, afin d'obtenir la valeur ?la source
J'ai remarqué dans la source Android que presque toutes les opérations obligent le Bundle à décompresser ses données. Donc, si (comme moi) vous devez le faire fréquemment à des fins de débogage, la saisie ci-dessous est très rapide:
la source
Désolé si c'est trop verbeux ou trop tard, mais c'était le seul moyen que j'ai pu trouver pour faire le travail. Le facteur le plus compliqué était le fait que java ne dispose pas de fonctions de passage par référence, donc les méthodes get --- Extra ont besoin d'une valeur par défaut pour retourner et ne peuvent pas modifier une valeur booléenne pour dire si la valeur par défaut est retournée par hasard, ou parce que les résultats n'étaient pas favorables. À cette fin, il aurait été plus agréable que la méthode lève une exception que de renvoyer une valeur par défaut.
J'ai trouvé mes informations ici: Android Intent Documentation .
Définir la documentation
la source
La version Kotlin de la méthode utilitaire de Pratik qui vide tous les extras d'une intention:
la source
for (key in bundle.keySet())
Si pour déboguer tout ce que vous voulez est une chaîne (en quelque sorte implicite par l'OP mais non explicitement indiquée), utilisez simplement
toString
sur les extrasBundle
:Il renvoie une chaîne telle que:
Documentation: Bundle.toString () (c'est malheureusement le
Object.toString()
javadoc par défaut et en tant que tel tout à fait inutile ici.)la source