android 如果传递可序列化对象,则清空AppWidgetProvider的onReceive中的extra

yruzcnhs  于 2023-05-21  发布在  Android
关注(0)|答案(1)|浏览(150)

我试图传递一个可序列化的对象,在我的小部件中单击,在我的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),而只输入字符串和整数,但我真的希望传递一个可序列化的对象,而不是传递大量的字符串和整数。

xytpbqjk

xytpbqjk1#

不幸的是,我找不到任何解决这个问题的方法,除了不使用“getSerializableExtra”和“putExtra(Serializable)”。我决定使用字符串和长整型。

相关问题