java - 在 Bundle 中,如何找出给定键值的类型?

标签 java android android-intent bundle primitive

我是 Android/Java 新手。我想编写一个测试应用程序,其中打印我添加到(自定义) Intent 的任意额外内容。 当我通过我的 BroadcastReceiver 收到 Intent 时,我可以获得所有额外的 Bundle和他们的 key :

Bundle bundle = intent.getExtras();
Set<String> keys = bundle.keySet();

如何找出与给定键关联的值的类型?

我的想法是这样的:

Object tmp = bundle.get(key);
// utilize https://stackoverflow.com/questions/709961/

但是这个way似乎不是最好的主意。另一种选择似乎是这样的:

if (bundle.getBoolean(key) == null) {
    // can't determine if `null` was explicitly associated or not
} else if /* ... */

但这样我就无法确定空值是否有意为之。 我可以创建一个自定义默认值类,但我不确定这是预期的方式。 编辑 我刚刚意识到我需要一个相同类型的默认值,所以我什至不能这样做。 (不过,可以仔细检查 null 和自定义默认类型值以了解情况。)

我如何动态地知道给定键的值的类型?

最佳答案

也许我应该通过比评论更好的答案来更好地解释我。

你可以做你想做的事。

Object tmp = bundle.get(key);
if (tmp instanceof Boolean) {
    boolean finalValue = ((Boolean)tmp).booleanValue();
}

如果您检查来自 Android 的源代码,您会看到类似的东西,它们总是传递包装器而不是原始类型。

public boolean More ...getBoolean(String key, boolean defaultValue) {
    Object o = mMap.get(key);
    if (o == null) {
        return defaultValue;
    }
    try {
        return (Boolean) o;
    } catch (ClassCastException e) {
        typeWarning(key, o, "Boolean", defaultValue, e);
        return defaultValue;
    }
}

不同之处在于它们不检查对象的类型,因为它们假设您知道自己在做什么。

source

关于java - 在 Bundle 中,如何找出给定键值的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19518956/

相关文章:

检索数据时Android DatabaseException错误

android - Android AudioTrack 中的 "status -12"是什么意思?

android - 匹配 <intent-filter> 中的 url 模式

java - 在外部类和内部类之间,在外部类内部或外部调用 main 方法时,它们的静态初始化程序运行顺序不同

java - 如何引用另一个类中的字符串?

Java map 同步

android - Google Play 商店正在将引荐数据更改为 "com.android.chrome"?

java - JFormattedTextField 插入符号在焦点上的位置

java - 无 Intent 的刷新 Activity

java - android:如何更改按钮点击布局?