【问题标题】:Pass arraylist in intent.putExtra in Broadcast gives null in getBundleExtra在广播中的 intent.putExtra 中传递 arraylist 在 getBundleExtra 中给出 null
【发布时间】:2016-04-05 06:57:07
【问题描述】:

我正在尝试通过来自 Service 的广播来传递数组列表,意图是这样的

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' 部分中有值。

【问题讨论】:

  • 你能用Broadcast Receiver更新代码吗?
  • 总是尽量避免BroadCastReciever 中的繁重工作。从广播接收器启动服务并从那里更新 UI/活动的更好方法。

标签: java android android-intent arraylist


【解决方案1】:

您正在尝试从activity getIntent 不是 broadcast receiver。使用在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);
}

【讨论】:

    猜你喜欢
    • 2019-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-29
    相关资源
    最近更新 更多