【问题标题】:How do I know what data is given in a Bundle?我如何知道 Bundle 中给出了哪些数据?
【发布时间】:2011-06-24 23:28:08
【问题描述】:

我正忙着弄清楚通过Intent/Bundles 将哪些数据传入我的方法。我尝试添加断点来检查数据,但我什么也没看到。也许是因为它是Parcelable,我无法在 Eclipse 中手动读取它。

例如,onActivityResult(int requestCode, int resultCode, Intent data) 对应于 Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI)。我怎么知道有哪些数据可用?请注意,我不是问有哪些可用数据,而是我到底是如何弄清楚的,所以我可以将相同的想法应用于 Android 框架中的任何Bundle/Intent?也许就像查看文档一样简单,但我没有看到完整的数据列表,也无法在 Eclipse 中看到它。所以我迷路了。

【问题讨论】:

    标签: android android-intent bundle


    【解决方案1】:

    Bundle.keySet() 为您提供捆绑包中所有密钥的列表。也就是说,通常您只期望某些键并查询它们,但 keySet() 用于检查您从某个地方获得的包。

    【讨论】:

    • 谢谢。我怎么知道问题是什么?我现在看到了关于它的文档,有吗?
    • 一个包实际上只是一个容器。这完全取决于打包它的应用程序。如果它是您自己的,那么很明显 - 这是您输入的任何内容。如果是其他人的(或来自操作系统),那么这取决于所说的应用程序放入了什么。选项 1:检查文档。选项 2:询问应用程序的开发人员。选项 3:使用 Bundle.keySet() 分析传入的包。
    • WHERE 是用于 ContactsContract.Contacts.CONTENT_URI 的 Bundle 中以 startActivityForResult 开头的内容的文档?
    • 文档中没有指定,因此:不要依赖它。在使用 Google 的通讯录应用程序后,您可以尝试聪明一点并使用 Bundle.keySet 来查看 Bundle 中的内容。但你猜怎么着:很有可能,HTC 的通讯录应用会返回一个不同的捆绑包。或 MotoBlur。在您的特定情况下,您唯一可以依赖的是意图的数据,因此请阅读此处概述的结果:stackoverflow.com/questions/866769/… .. 除了 ID 之外,您还需要什么信息?
    • 似乎不太可能根据环境返回一组不同的“标准”数据。我不关心任何特定的环境。我想知道谁知道哪些数据可用于我的任何 onCallback(Intent data) 处理程序。遍历密钥似乎很通用,我不敢相信谷歌会把它留给开发人员自己解决。
    【解决方案2】:
    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;
    }
    

    【讨论】:

      【解决方案3】:

      我正在获取存储包的所有键和值...

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

      输出:

      (key)       :(value)    
      profile_name:abc
      

      【讨论】:

        【解决方案4】:

        您从 Bundle 中获得的唯一东西就是您放入的内容。Bundle 是在活动之间传递信息的方式。如果您负责整个应用程序,则无需在 Bundle 内部查找对象,只需抓住它们即可。想想 hashmap 键...如果您不知道键,就不能搜索 hashmap。

        要将项目放入 Bundle 并将其传递给下一个 Activity,您需要将其作为 Extra。查看here 以获取通过额外内容和活动之间的捆绑传递数据的示例。

        复制粘贴如下:

        来自 Activity1

        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");
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-01-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-11-29
          • 1970-01-01
          相关资源
          最近更新 更多