2013-02-19 12 views

答えて

79

Bundle#keySet()が有効です。

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

オブジェクトを取得する場合は、Bundle#get(String key)(which is also in the same documentation I linked at the top of my answer)を使用できます。ただし、一般的なget()コールを使用してください:

  • あなたはObjectを使用しています。単純にログに印刷する場合は、toString()が呼び出され、すべて正常です。ただし、実際にキーのペアを使用する場合は、間違ったメソッドを呼び出さないようにinstanceofのチェックを行う必要があります。
  • 特別なObject(ArrayListsや特殊なSerializable/Parcelableなど)がある場合は、printから有用なものが得られない可能性が高いので、toStringが呼び出されます。
+2

私は 'bundle.keySet()'を意味すると思います(あなたのドキュメントのリンクは問題ないと思います)。それ以外の場合は正しいです。 – Eric

+1

@エリック、愚かなエラー。私はそれにリンクしたとき、少なくとも私はそれを正しく綴りました。 –

28

次のようにマッピングされた値を印刷することで、より具体的な取得することができます。

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

バンドルツー文字列コンバータ:

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; 
} 

使用例:

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

出力:

details=Bundle{ RESPONSE_CODE => 5; }Bundle 

矢印=>とセミコロン;は、キーと値にスペースを記述できることに注意してください。矢印の前のスペース、矢印の後のスペース、セミコロンの前のスペース、セミコロンの後のスペース、{の後のスペース、および}の前のスペースまたは値。

+0

良い解決策ですが、パフォーマンスを向上させるためにStringBufferを使用します。 'public static String bundle2string(バンドルバンドル){ StringBuffer buf = new StringBuffer(" Bundle {"); (String key:bundle.keySet())buf.append( "" + key + "=>" + bundle.get(key)+ ";"); buf.append( "バンドル"); 戻り値buf.toString(); } ' – Maurix

+1

IMOのパフォーマンスは_bundle2string()_の目的とは無関係ですが、逆の場合でも、http://stackoverflow.com/a/4/49160/755804によれば_Stringの連結はStringBuilderオペレーションに変換されます。コンパイラ._私は自分自身をAndroidでチェックしなかった。誰かがこのことを気にしている場合は、確認してください。 – 18446744073709551615

+0

@Maurix関連するスレッドがないため、StringBuilderはStringBufferよりも優れています。https://developer.android.com/reference/java/lang/StringBuffer.html –

関連する問題