296 votes

Liste de tous les extras d'une intention

Pour des raisons de débogage, je souhaite dresser la liste de tous les extras (et de leurs valeurs) d'un Intent. Maintenant, obtenir les clés n'est pas un problème

Set<String> keys = intent.getExtras().keySet();

mais obtenir les valeurs des clés est un problème pour moi, car certaines valeurs sont des chaînes de caractères, d'autres des booléens... Comment puis-je obtenir les valeurs dans une boucle (en parcourant les clés) et écrire les valeurs dans un fichier journal ? Merci pour tout conseil !

547voto

kshahar Points 3014

Voici ce que j'ai utilisé pour obtenir des informations sur une intention non documentée (tierce partie) :

Bundle bundle = intent.getExtras();
if (bundle != null) {
    for (String key : bundle.keySet()) {
        Log.e(TAG, key + " : " + (bundle.get(key) != null ? bundle.get(key) : "NULL"));
    }
}

Veillez à vérifier si bundle est nul avant la boucle.

3 votes

Je viens de découvrir Intent Intercept Android app . Cela fonctionne aussi.

1 votes

if (bundle == null) { return; } FTW

25 votes

Bundle bundle = data.getExtras();data est l'intention. Pour les débutants Android.

113voto

Pratik Points 475

C'est ainsi que je définis une méthode utilitaire pour déverser tous les extras d'un Intent.

import java.util.Iterator;
import java.util.Set;
import android.os.Bundle;

public static void dumpIntent(Intent i){

    Bundle bundle = i.getExtras();
    if (bundle != null) {
        Set<String> keys = bundle.keySet();
        Iterator<String> it = keys.iterator();
        Log.e(LOG_TAG,"Dumping Intent start");
        while (it.hasNext()) {
            String key = it.next();
            Log.e(LOG_TAG,"[" + key + "=" + bundle.get(key)+"]");
        }
        Log.e(LOG_TAG,"Dumping Intent end");
    }
}

8 votes

Merci de votre attention ! Maintenant, si seulement l'équipe Android commençait à implémenter des surcharges .toString utiles comme celle-ci.

16voto

user123321 Points 2862
private TextView tv;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    tv = new TextView(this);
    tv.setText("Extras: \n\r");

    setContentView(tv);

    StringBuilder str = new StringBuilder();
    Bundle bundle = getIntent().getExtras();
    if (bundle != null) {
        Set<String> keys = bundle.keySet();
        Iterator<String> it = keys.iterator();
        while (it.hasNext()) {
            String key = it.next();
            str.append(key);
            str.append(":");
            str.append(bundle.get(key));
            str.append("\n\r");
        }
        tv.setText(str.toString());
    }
}

8voto

nicholas.hauschild Points 21796

La méthode get(String key) de Bundle renvoie un objet. Le mieux est de parcourir l'ensemble des clés en appelant get(String) sur chaque clé et en utilisant toString() sur l'Objet pour les restituer. Cela fonctionnera mieux pour les primitives, mais vous pourriez rencontrer des problèmes avec les objets qui n'implémentent pas de toString().

2voto

Ben Williams Points 2892

Vous pouvez utiliser for (String key : keys) { Object o = get(key); pour renvoyer un objet, appeler getClass().getName() pour obtenir le type, puis faire une série de if name.equals("String") pour déterminer quelle méthode il faut appeler pour obtenir la valeur ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X