出于调试的原因,我想列出一个Intent的所有附加项(以及它们的值)。现在,拿到钥匙不是问题
Set<String> keys = intent.getExtras().keySet();
但是获取键的值对我来说是一个,因为有些值是字符串,有些是布尔值……如何在循环中获取值(遍历键)并将值写入日志文件?谢谢你的提示!
出于调试的原因,我想列出一个Intent的所有附加项(以及它们的值)。现在,拿到钥匙不是问题
Set<String> keys = intent.getExtras().keySet();
但是获取键的值对我来说是一个,因为有些值是字符串,有些是布尔值……如何在循环中获取值(遍历键)并将值写入日志文件?谢谢你的提示!
当前回答
这就是我如何定义实用工具方法来转储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");
}
}
其他回答
你可以在一行代码中完成:
Log.d("intent URI", intent.toUri(0));
它输出如下内容:
“#意图;行动= android.intent.action.MAIN;类别= android.intent.category.LAUNCHER; launchFlags = 0 x10a00000;组件= com.mydomain.myapp / .StartActivity; sourceBounds = 12% 20870% 20276% 201167;l.profile = 0;端”
在这个字符串的末尾(我加粗的部分),您可以找到额外的列表(在这个示例中只有一个额外的)。
这是根据toUri文档: URI包含了作为基本URI的意图数据,以及描述动作、类别、类型、标志、包、组件和额外内容的额外片段。
private TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
tv = new TextView(this);
tv.setText("Extras: \n\r");
setContentView(tv);
StringBuilder str = new StringBuilder();
Bundle bundle = getIntent().getExtras();
if (bundle != null) {
Set<String> keys = bundle.keySet();
Iterator<String> it = keys.iterator();
while (it.hasNext()) {
String key = it.next();
str.append(key);
str.append(":");
str.append(bundle.get(key));
str.append("\n\r");
}
tv.setText(str.toString());
}
}
你可以使用for(字符串键:键){对象o = get(键);为了返回一个对象,在它上调用getClass().getName()来获得类型,然后做一组if name.equals("String")类型的事情来计算出你实际上应该调用哪个方法,以获得值?
这就是我如何定义实用工具方法来转储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");
}
}
我注意到在Android源代码中,几乎每个操作都迫使Bundle解包它的数据。因此,如果(像我一样)你需要经常这样做以调试目的,下面是非常快速的输入:
Bundle extras = getIntent().getExtras();
extras.isEmpty(); // unparcel
System.out.println(extras);