出于调试的原因,我想列出一个Intent的所有附加项(以及它们的值)。现在,拿到钥匙不是问题
Set<String> keys = intent.getExtras().keySet();
但是获取键的值对我来说是一个,因为有些值是字符串,有些是布尔值……如何在循环中获取值(遍历键)并将值写入日志文件?谢谢你的提示!
出于调试的原因,我想列出一个Intent的所有附加项(以及它们的值)。现在,拿到钥匙不是问题
Set<String> keys = intent.getExtras().keySet();
但是获取键的值对我来说是一个,因为有些值是字符串,有些是布尔值……如何在循环中获取值(遍历键)并将值写入日志文件?谢谢你的提示!
当前回答
在Kotlin中将它作为一个用“,”分隔的字符串!
val extras = intent?.extras?.keySet()?.map { "$it: ${intent.extras?.get(it)}" }?.joinToString { it }
基于ruX的答案。
其他回答
你可以使用for(字符串键:键){对象o = get(键);为了返回一个对象,在它上调用getClass().getName()来获得类型,然后做一组if name.equals("String")类型的事情来计算出你实际上应该调用哪个方法,以获得值?
Pratik的实用方法的Kotlin版本,它转储了一个Intent的所有额外内容:
fun dumpIntent(intent: Intent) {
val bundle: Bundle = intent.extras ?: return
val keys = bundle.keySet()
val it = keys.iterator()
Log.d(TAG, "Dumping intent start")
while (it.hasNext()) {
val key = it.next()
Log.d(TAG,"[" + key + "=" + bundle.get(key)+"]");
}
Log.d(TAG, "Dumping intent finish")
}
Bundle的get(String key)方法返回一个对象。最好的方法是旋转键集,在每个键上调用get(String),并在对象上使用toString()来输出它们。这对于基本类型最有效,但是对于没有实现toString()的对象,可能会遇到问题。
Bundle extras = getIntent().getExtras();
Set<String> ks = extras.keySet();
Iterator<String> iterator = ks.iterator();
while (iterator.hasNext()) {
Log.d("KEY", iterator.next());
}
我注意到在Android源代码中,几乎每个操作都迫使Bundle解包它的数据。因此,如果(像我一样)你需要经常这样做以调试目的,下面是非常快速的输入:
Bundle extras = getIntent().getExtras();
extras.isEmpty(); // unparcel
System.out.println(extras);