我试图传递一个可序列化的对象,在我的小部件中单击,在我的WidgetFactory(扩展RemoteViewsService.RemoteViewsFactory)中,我传递一个对象:
val fillInIntent = Intent().apply {
putExtra(Constants.Widget.ITEM, item)
putExtra(Constants.IntentItemPosition, 67)
}
itemView.setOnClickFillInIntent(R.id.widgetItemButton, fillInIntent)
return itemView
在onReceive中的WidgetProvider中,我得到了它:
override fun onReceive(context: Context, intent: Intent) {
super.onReceive(context, intent)
when (intent.action) {
Constants.Widget.ACTION-> {
val exampleItem =
intent.getSerializableExtra(Constants.Widget.ITEM) as? ExampleItem
exampleItem!!.let { // some code }
在exampleItem!!.let{}它抛出NullPointerException,因为extra为空。在我的onUpdate方法中,我设置了setPendingIntentTemplate:
val intent = Intent(context, WidgetProvider::class.java).apply {
action = Constants.Widget.ACTION putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId)
}
val pendingIntent = PendingIntent.getBroadcast(context, 0, intent , PendingIntent.FLAG_UPDATE_CURRENT)
widgetViews.setPendingIntentTemplate(R.id.widget_listView, pendingIntent)
我已经做了日志,检查是否额外的是空的,他们是。但是如果我注解了行putExtra(Constants.Widget.ITEM,item),只留下putExtra(Constants.IntentItemPosition,67),我将成功地在onReceive中获得传递的nubmer 67(如果我不注解该行,我将只接收默认值)。我可以试着不使用putExtra(serializable),而只输入字符串和整数,但我真的希望传递一个可序列化的对象,而不是传递大量的字符串和整数。
1条答案
按热度按时间xytpbqjk1#
不幸的是,我找不到任何解决这个问题的方法,除了不使用“getSerializableExtra”和“putExtra(Serializable)”。我决定使用字符串和长整型。