从类 FirebaseMessageReceiver 传入 Intent 的对象无法在 Activity 中获取

Posted

技术标签:

【中文标题】从类 FirebaseMessageReceiver 传入 Intent 的对象无法在 Activity 中获取【英文标题】:Object passed in Intent from class FirebaseMessageReceiver not able to fetch in Activity 【发布时间】:2021-11-09 09:52:38 【问题描述】:

在收到任何推送通知时, 在 FirebaseMessageReceiver 类中像往常一样我们创建 Pending Intent,在其中存储数据以将其传递给 Activity。

我做了以下同样的事情:

val intentPushNotification = Intent(this, HomeActivity::class.java)
    intentPushNotification.putExtra(PUSH_NOTIFICATION_BATTERY_ID, ""+firmwareObj.batteryId)
    intentPushNotification.putExtra(PUSH_NOTIFICATION_FIRMWARE_OBJ,firmwareObj)

简单地说, 在 HomeActivity 中接收如下:

val batteryId = intent.getStringExtra(PUSH_NOTIFICATION_BATTERY_ID)
Log.e(">>>>> TEST ",""+batteryId)

val objFirmware = intent.getSerializableExtra(PUSH_NOTIFICATION_FIRMWARE_OBJ) as FirmwareUpdate

我的 FirmwareUpdate 类如下:

@Keep
data class FirmwareUpdate(
    val batteryId: String,
    val description: String,
    val firmwareUrl: FirmwareUrl,
    val id: Int,
    val timeStamp: Int,
    val versionNumber: String,
    val whatsNew: String
): Serializable

但问题是我成功获取了 batteryId 的值,而不是 firmwareObj

我在其中得到了空值。可能是什么问题? 您还可以检查我是否在 pojo 类中也实现了 :Serializable

错误:

kotlin.TypeCastException: null 不能转换为非 null 类型 com.appview.home.model.downloadapi.FirmwareUpdate

【问题讨论】:

FirmwareUrl 还是Serializable 您如何处理您创建的PendingIntent?你把它放在Notification 吗? 我使用了 bundle,它现在可以工作了。 【参考方案1】:

解决方案是, 我们可以创建捆绑包, 可以在 Bundle 中添加可序列化的对象,然后我们必须在 Intent 中传递该 Bundle。

这样,我们就可以从名为 FirebaseMessageReceiver 的 Firebase 通知类中获取 Activity 中的对象了。

【讨论】:

以上是关于从类 FirebaseMessageReceiver 传入 Intent 的对象无法在 Activity 中获取的主要内容,如果未能解决你的问题,请参考以下文章

如何从类中获取 id [重复]

从类模板生成 lambda

从类实现时 UIButton 不可点击

LINQ 从类返回属性

如何从类中为 EnvironmentObject 设置值?

从类外部访问实例变量