如何从意图中获取日期额外信息?

4

我将一个意图打包,并添加了一个日期对象作为其中的附加项,如下所示:

intent.putExtra(DATE_EXTRA, t.getDate());

后来,当我阅读额外信息时,我尝试像这样获取日期:

this.date = new Date(intent.getExtras().getString(DATE_EXTRA));

然而,这会返回一个关于字符串为空的错误。我认为上面不是正确的方法,因为我不是在寻找一个字符串,但我没能在任何地方找到intent.getDateExtra()方法。我该怎么办?
我知道日期已经成功传递,因为我可以在调试时看到它: enter image description here
3个回答

15

替换:

this.date = new Date(intent.getExtras().getString(DATE_EXTRA));

随着:

this.date = (Date)intent.getSerializableExtra(DATE_EXTRA);

看看那是否有帮助。


虽然奇怪的是,你可以放置一个日期额外的内容,但不能调用 getDateExtra,而我却可以调用 getStringgetDoublegetLong 等等... - AdamMc331
2
@McAdam331:「你真是个救星」—— 你想到了一个相当不寻常的神。 :-) 「当我可以调用 getString、getDouble、getLong 等函数时」—— doublelong 是基本数据类型,而 StringDate 更受欢迎。 - CommonsWare

0

另一个解决办法是传递日期的长整型数值:

intent.putExtra(DATE_EXTRA, t.getDate().getTime());
....
this.date = new Date(intent.getLongExtra(DATE_EXTRA, 0)); //0 is the default value

0

Kotlin中的安全方式:

  intent.putExtra("MOVE_DATE", date)

并通过检查密钥和空值来安全地读取它:

 val moveDate: Date?     
 intent?.apply {
 if (hasExtra("MOVE_DATE")) {
       moveDate = getSerializableExtra("MOVE_DATE") as? Date
       moveDate?.let { print(it) }
    }
 }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接