2013-02-19 10 views

risposta

79

Bundle#keySet() dovrebbe funzionare.

for (String key: bundle.keySet()) 
{ 
    Log.d ("myApplication", key + " is a key in the bundle"); 
} 

E se si desidera ottenere l'oggetto, è possibile utilizzare Bundle#get(String key)(which is also in the same documentation I linked at the top of my answer). Tuttavia, tieni presente la chiamata generica get():

  • Stai lavorando con Oggetto. Se stai semplicemente stampando su un log, verrà invocato toString() e tutto andrà bene. Tuttavia, se si desidera utilizzare effettivamente la coppia di chiavi, è necessario eseguire i controlli instanceof per evitare di chiamare il metodo sbagliato.
  • Poiché toString verrà richiamato, se si dispone di un oggetto speciale (ad es. Liste di array o speciali extra serializzabili/parcellizzabili) è probabile che non si ottenga nulla dalla stampa.
+2

Penso che tu intendessi 'bundle.keySet()' (dato che il tuo collegamento dei documenti va bene); altrimenti è corretto – Eric

+1

@Eric gah, errori stupidi. Almeno l'ho scritto correttamente quando l'ho collegato. –

28

È possibile ottenere più specifica stampando il valore mappato come segue:

for (String key : bundle.keySet()) 
{ 
    Log.d("Bundle Debug", key + " = \"" + bundle.get(key) + "\""); 
} 
15

Bundle a stringa convertitore:

public static String bundle2string(Bundle bundle) { 
    if (bundle == null) { 
     return null; 
    } 
    String string = "Bundle{"; 
    for (String key : bundle.keySet()) { 
     string += " " + key + " => " + bundle.get(key) + ";"; 
    } 
    string += " }Bundle"; 
    return string; 
} 

Esempio di utilizzo:

Log.d(TAG,"details="+bundle2string(details)); 

e uscita:

details=Bundle{ RESPONSE_CODE => 5; }Bundle 

Si noti che le frecce => e punto e virgola ; consentono di menzionare gli spazi nelle chiavi e nei valori. Uno spazio prima della freccia, uno spazio dopo la freccia, nessuno spazio prima del punto e virgola, uno spazio dopo il punto e virgola, uno spazio dopo { e uno spazio prima dello } e tutti gli altri spazi ci sono perché sono nelle chiavi o valori.

+0

Buona soluzione, ma preferisco usare un StringBuffer per prestazioni migliori: 'public static String bundle2string (Bundle bundle) { StringBuffer buf = new StringBuffer (" Bundle {"); per (Chiave stringa: bundle.keySet()) buf.append ("" + key + "=>" + bundle.get (chiave) + ";"); buf.append ("} Bundle"); return buf.toString(); } ' – Maurix

+1

La prestazione IMO è irrilevante ai fini di _bundle2string() _, ma anche se supponiamo il contrario, in base a http://stackoverflow.com/a/4649160/755804, la concatenazione _String viene convertita in operazioni StringBuilder dal compiler._ Non l'ho controllato io per Android; se qualcuno si preoccupa di controllare questo, si prega di confermare o confutare. – 18446744073709551615

+0

@ Maurix Poiché non ci sono thread coinvolti, StringBuilder è migliore di StringBuffer: https://developer.android.com/reference/java/lang/StringBuffer.html –

Problemi correlati