Android Wear - Extra中的Integer ArrayList为null

时间:2015-09-02 13:48:08

标签: android arraylist wear-os

我遇到了一个问题,我不知道为什么会这样。

我从手持设备向可穿戴设备发送通知,以了解何时必须打开活动。

从手持设备,我发送一个Integer值的ArrayList:

dataMapRequest.getDataMap().putIntegerArrayList("SELECTED_RISKS", this.selectedRisks);

在WearableListenerService实现的方法“onDataChange”中,在我的Wear应用程序中,我以这种方式获取值:

ArrayList<Integer> risksSelected = dataMapItem.getDataMap().getIntegerArrayList("SELECTED_RISKS");

这很有效。 ArrayList不为null。然后,我将ArrayList放在“Extras”中,将它们设置为Intent并在Wearable中显示Notification:

Intent viewIntent = new Intent(this, MainActivity.class);
Bundle extras = new Bundle();
extras.putIntegerArrayList("SELECTED_RISKS", risksSelected);
viewIntent.putExtras(extras);
PendingIntent pendingViewIntent = PendingIntent.getActivity(this, 0, viewIntent, 0);
...

这也有效。我可以在调试器中看到Extras正在保存ArrayList。但问题来了。

当我尝试在“MainActivity”中加载额外内容时:

if(extras.containsKey("SELECTED_RISKS") && extras.getIntegerArrayList("SELECTED_RISKS")!=null)

该包具有键“SELECTED_RISKS”,但其值为null。

我不知道为什么会这样,你能帮助我吗?

由于

1 个答案:

答案 0 :(得分:0)

这可能是由于PendingIntent的工作方式。使用PendingIntent时,额外内容会丢失,这是一个常见问题。如果您之前已经设置了具有特定意图的PendingIntent,现在您再次设置它,唯一的区别是额外的,将使用旧的意图。

查看PendingIntent的文档。具体来说,您可以尝试使用FLAG_UPDATE_CURRENT来强制新增内容。