Qua*_*aur 62 java android logcat android-bundle
Bundle
如果你不记得所有键的名称(甚至只能打印键名称会很酷),是否有一种简单的方法可以将a的内容打印到Logcat?
A--*_*--C 109
Bundle#keySet()应该可以工作.
for (String key: bundle.keySet())
{
Log.d ("myApplication", key + " is a key in the bundle");
}
Run Code Online (Sandbox Code Playgroud)
如果你想获得Object,你可以使用Bundle#get(String key)
(这也是我在答案顶部链接的相同文档).但是,请记住使用通用get()
调用:
toString()
将被调用,一切都会好的.但是,如果您确实想要使用密钥对,则需要进行instanceof
检查以避免调用错误的方法.Phi*_*hil 35
您可以通过打印映射值来获得更具体的信息,如下所示:
for (String key : bundle.keySet())
{
Log.d("Bundle Debug", key + " = \"" + bundle.get(key) + "\"");
}
Run Code Online (Sandbox Code Playgroud)
184*_*615 21
捆绑到字符串转换器:
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;
}
Run Code Online (Sandbox Code Playgroud)
用法示例:
Log.d(TAG,"details="+bundle2string(details));
Run Code Online (Sandbox Code Playgroud)
并输出:
details=Bundle{ RESPONSE_CODE => 5; }Bundle
Run Code Online (Sandbox Code Playgroud)
请注意,箭头=>
和分号;
允许您在键和值中提及空格.箭头前面有一个空格,箭头后面有一个空格,分号前没有空格,分号后面有一个空格,后面有{
一个空格,前面有一个空格}
,所有其他空格都在那里,因为它们在键或值中.
Kotlin 中简单的 Bundle to String 实现:
val bundleToString = bundle.keySet()
.joinToString(", ", "{", "}") { key ->
"$key=${bundle[key]}"
}
Run Code Online (Sandbox Code Playgroud)
结果示例{id=3, name="Jhon"}
在 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")
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
用法: myBundle.printDebugLog()
意识到这并不能完全回答问题,但是我看到有开发人员试图将内容转储到logcat /控制台,因为他们不知道他们可以在Android Studio调试器中进行设置,以便在调试时显示自定义的对象渲染。你碰到一个断点。对于Bundle,您可以采用此处其他答案中所示的代码类型,并将其用作自定义渲染器,这样就无需将转储通过管道传输到logcat和/或控制台。
(这些说明来自Android Studio 3.1.3(2018年6月)...
Run Code Online (Sandbox Code Playgroud)StringBuilder builder = new StringBuilder(); for (String key : ((android.os.Bundle)this).keySet()) { Object value = ((android.os.Bundle)this).get(key); builder.append("["); builder.append(key); builder.append("]=["); builder.append(value); builder.append("]("); builder.append((value != null) ? value.getClass().getSimpleName() : "null"); builder.append("), "); } return builder.toString();
现在,当您运行应用程序时,遇到一个断点,该断点显示了一个类型为android.os.Bundle的变量,您将在调试器窗口的variables部分中看到以上代码生成的输出。
归档时间: |
|
查看次数: |
27661 次 |
最近记录: |