出于调试的原因,我想列出一个Intent的所有附加项(以及它们的值)。现在,拿到钥匙不是问题
Set<String> keys = intent.getExtras().keySet();
但是获取键的值对我来说是一个,因为有些值是字符串,有些是布尔值……如何在循环中获取值(遍历键)并将值写入日志文件?谢谢你的提示!
出于调试的原因,我想列出一个Intent的所有附加项(以及它们的值)。现在,拿到钥匙不是问题
Set<String> keys = intent.getExtras().keySet();
但是获取键的值对我来说是一个,因为有些值是字符串,有些是布尔值……如何在循环中获取值(遍历键)并将值写入日志文件?谢谢你的提示!
当前回答
如果为了调试,你想要的只是一个字符串(OP暗示了,但没有显式声明),只需在额外的Bundle上使用toString:
intent.getExtras().toString()
它返回一个字符串,例如:
Bundle[{key1=value1, key2=value2, key3=value3}]
Bundle.toString()(不幸的是,它是默认的Object.toString() javadoc,因此在这里非常无用。)
其他回答
我注意到在Android源代码中,几乎每个操作都迫使Bundle解包它的数据。因此,如果(像我一样)你需要经常这样做以调试目的,下面是非常快速的输入:
Bundle extras = getIntent().getExtras();
extras.isEmpty(); // unparcel
System.out.println(extras);
以下是我用来获取非法(第三方)意图信息的方法:
Bundle bundle = intent.getExtras();
if (bundle != null) {
for (String key : bundle.keySet()) {
Log.e(TAG, key + " : " + (bundle.get(key) != null ? bundle.get(key) : "NULL"));
}
}
确保在循环之前检查bundle是否为空。
这就是我如何定义实用工具方法来转储Intent的所有额外内容。
import java.util.Iterator;
import java.util.Set;
import android.os.Bundle;
public static void dumpIntent(Intent i){
Bundle bundle = i.getExtras();
if (bundle != null) {
Set<String> keys = bundle.keySet();
Iterator<String> it = keys.iterator();
Log.e(LOG_TAG,"Dumping Intent start");
while (it.hasNext()) {
String key = it.next();
Log.e(LOG_TAG,"[" + key + "=" + bundle.get(key)+"]");
}
Log.e(LOG_TAG,"Dumping Intent end");
}
}
如果为了调试,你想要的只是一个字符串(OP暗示了,但没有显式声明),只需在额外的Bundle上使用toString:
intent.getExtras().toString()
它返回一个字符串,例如:
Bundle[{key1=value1, key2=value2, key3=value3}]
Bundle.toString()(不幸的是,它是默认的Object.toString() javadoc,因此在这里非常无用。)
Bundle的get(String key)方法返回一个对象。最好的方法是旋转键集,在每个键上调用get(String),并在对象上使用toString()来输出它们。这对于基本类型最有效,但是对于没有实现toString()的对象,可能会遇到问题。