从类 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 中获取的主要内容,如果未能解决你的问题,请参考以下文章