2011-06-24 112 views
30

我有一段时间想通过Intent/Bundle s来确定什么数据来到我的方法。我尝试添加断点来检查数据,但我什么也没看到。也许是因为它是Parcelable我不能在Eclipse中手动读取它。如何知道捆绑包中提供了哪些数据?

例如,onActivityResult(int requestCode, int resultCode, Intent data)Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI)。我如何知道有哪些数据可用?注意,我没有要求提供什么数据,但是我怎么知道这些数据,所以我可以将相同的想法应用到来自Android框架的任何Bundle/Intent?也许这很简单,就像查看文档一样,但是我没有看到数据的完整列表,并且我在Eclipse中看不到它。所以我迷失了方向。

回答

64

Bundle.keySet()让你在包的所有键的列表。这就是说,通常你只是期望某些键和查询它们,但是keySet()对于检查你从某个地方得到的bundle是有用的。

+0

感谢。我如何知道问题是什么?我现在看到关于它的文档,是吗? – user123321

+0

捆绑包实际上只是一个容器。它完全取决于将其打包的应用程序。如果是你自己的,那很明显 - 无论你输入什么内容。如果是别人的(或来自操作系统),那么它取决于应用程序放入的内容。选项1:检查文档。选项2:询问应用程序的开发人员。选项3:使用Bundle.keySet()分析传入的包。 – EboMike

+0

** WHERE **是用于startActivityForResult的ContactsContract.Contacts.CONTENT_URI包中的东西的文档? – user123321

0

你摆脱捆绑的唯一的东西就是你放入的东西。捆绑是在活动之间传递信息的方式。如果你负责你的整个应用程序,你不需要在Bundle中查看你的对象,你应该抓住它们。认为hashmap键...如果你不知道密钥,它不像你可以搜索hashmap。

要将某个物品放入捆绑包并将其传递给下一个活动,您需要将其作为Extra。查看here,了解通过活动之间的附加组件和捆绑来传递数据的示例。

复制和粘贴如下:

从活动1

Intent intent = new Intent(this,myActivity2.class); 
Bundle bundle = new Bundle(); 
bundle.putString(“myValue“, myValue); 
intent.putExtras(bundle); 
navigation.this.startActivity(intent); 

在活性2

Bundle bundle = getIntent().getExtras(); 
act2MyValue= bundle.getString(“myValue“); 
39
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; 
} 
+5

像你这样的人是我为什么如此活跃的原因给我们现成的咖啡:P谢谢 – khandelwaldeval

2

我越来越alll键和存储捆绑的价值...

for (String key : bundle.keySet()) { 
    string += " " + key + " => " + bundle.get(key) + ";"; 
} 

输出:

(key)  :(value)  
profile_name:abc 
相关问题