广播中intent.putExtra中的Pass arraylist在getBundleExtra中给出null



我正试图通过Service的广播传递arraylist,其意图类似于

ArrayList objects = new ArrayList();
    for (MasterVO vo : masterVOs) {
        objects.add(vo.getMasterTables());
        objects.add(vo.getDeviceUpdateStatus());
    }
    Bundle extra = new Bundle();
    extra.putSerializable("objects", objects);
    intent.putExtra("extra", extra);
    sendBroadcast(intent);

然后在活动中获取:

   private void updateUI(Intent intent) {
   Bundle extra = getIntent().getBundleExtra("extra");
    ArrayList<Object> databaseList = (ArrayList<Object>) extra.getSerializable("objects");
        fillMasterTable(databaseList);
}

广播的onReceive()

  private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        updateUI(intent);
    }
};

我在extra中得到null。我做错了什么?我看到"sendBroadcast"部分有一些值。

您正在尝试从activity而不是broadcast receiver进行getIntent。使用在onReceive中接收到的intent

public void onReceive(Context context, Intent intent) {
      updateUI(intent);
}
private void updateUI(Intent intent) {
  Bundle extra = intent.getBundleExtra("extra"); //use intent NOT getIntent()
  ArrayList<Object> databaseList = (ArrayList<Object>)
  extra.getSerializable("objects");
  fillMasterTable(databaseList);
}

最新更新