73

Bundleすべてのキーの名前を思い出せない場合に、a の内容を Logcat に出力する簡単な方法はありますか?

4

11 に答える 11

125

Bundle#keySet()が機能するはずです。

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

そして、オブジェクトを取得したい場合は、使用できますBundle#get(String key)(これは、回答の上部にリンクした同じドキュメントにもあります)。ただし、一般的なget()呼び出しを使用することに注意してください。

  • あなたはオブジェクトを扱っています。単純にログに出力する場合は、toString()が呼び出され、すべて問題ありません。ただし、実際にキーのペアを使用する場合はinstanceof、間違ったメソッドを呼び出さないようにチェックを行う必要があります。
  • toString が呼び出されるため、特別なオブジェクト (たとえば、ArrayLists、または特別な Serializable/Parcelable エクストラ) がある場合、印刷出力から有用なものが得られない可能性が高くなります。
于 2013-02-19T02:15:22.110 に答える
41

次のようにマップされた値を出力することで、より具体的に取得できます。

for (String key : bundle.keySet())
{
    Log.d("Bundle Debug", key + " = \"" + bundle.get(key) + "\"");
}
于 2013-02-19T04:37:14.757 に答える
23

バンドルからストリングへのコンバーター:

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

矢印=>とセミコロン;を使用すると、キーと値にスペースを含めることができることに注意してください。矢印の前に 1 つのスペース、矢印の後に 1 つのスペース、セミコロンの前にスペースなし、セミコロンの後に 1 つのスペース、 の後{に 1 つのスペースと の前に 1 つのスペース}、および他のすべてのスペースは、キーまたは値に含まれているため存在します。 .

于 2013-11-20T11:32:35.993 に答える
6

Kotlin では、子バンドルが含まれている場合は再帰的です。

/**
 * Recursively logs the contents of a [Bundle] for debugging.
 */
fun Bundle.printDebugLog(parentKey: String = "") {
    if (keySet().isEmpty()) {
        Log.d("printDebugLog", "$parentKey is empty")
    } else {
        for (key in keySet()) {
        when (val value = this[key]) {
                is Bundle -> value.printDebugLog(key)
                is Array<*> -> Log.d("printDebugLog", "$parentKey.$key : ${value.joinToString()}")
                else -> Log.d("printDebugLog", "$parentKey.$key : $value")
            }
        }
    }
}

使用法:myBundle.printDebugLog()

于 2018-05-23T12:34:47.487 に答える