【问题标题】:Is intent.getExtras.getInt() same as intent.getIntExtra()?intent.getExtras.getInt() 是否与 intent.getIntExtra() 相同?
【发布时间】:2014-10-13 10:32:20
【问题描述】:

我很困惑:

intent.getExtras.getInt()intent.getIntExtra() 一样吗?

如果我使用START_REDELIVER_INTENT 启动我的服务,额外的 是否包含在意图中?

我在重新启动崩溃的服务时收到NullPointerException,我觉得这很奇怪....

【问题讨论】:

    标签: android android-intent service extras


    【解决方案1】:

    来自 Intent 源代码:

    private Bundle mExtras;
    
    // [...]
    
    public int getIntExtra(String name, int defaultValue) {
        return mExtras == null ? defaultValue :
        mExtras.getInt(name, defaultValue);
    }
    
    public Bundle getExtras() {
        return (mExtras != null)
            ? new Bundle(mExtras)
           : null;
    }
    

    所以是的。除了getExtras() 之外,同样的事情可能会返回 null。

    【讨论】:

    • 为了返回Bundle的副本,那么原始的mExtras Bundle保持不变。
    【解决方案2】:

    它们并不完全相同。正如您所发现的,如果intent.getExtras() 返回null,第一个变体将导致 NPE。第二个变体进行自己的空值检查,如果额外的不存在,则返回默认值。

    如果没有看到更多代码,我无法推测为什么您没有获得预期的 Extras。

    【讨论】:

    • 我明白了。尽管在重新启动服务时也会重新交付附加​​功能是预期的行为吗?对吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-13
    • 2011-01-28
    • 2013-06-21
    • 2014-03-13
    • 2021-08-17
    • 2019-11-12
    • 1970-01-01
    相关资源
    最近更新 更多