Handler 接收Parcelable ArrayList时返回空的错误

 遇到一个问题,从handler 接收的Parcelable ArrayList返回空,调试发现这个arraylist生成的时候是有值的,传到handler就没值了

 赋值的代码

                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        ArrayList<Entry> entryList = parseRssXml(response);
                        Message msg = Message.obtain();
                        msg.getData().putParcelableArrayList("list",entryList);
                        mHandler.sendEmptyMessage(CONVERT_XML_TO_ENTRY);
                    }
                }).start();

这里debug发现 entrylist是有值的 size为15

    private Handler mHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            switch (msg.what){
                case CONVERT_XML_TO_ENTRY:
                    List<Entry> list = msg.getData().getParcelableArrayList("list");
                    if (list != null && list.size() != 0) {
                        if (adapter == null) {
                            adapter = new RssReaderAdapter();
                        }
                        adapter.setList(list);
                    }

                    setProgressBarIndeterminateVisibility(false);
                    break;
                default:
                    break;
            }
        }
    };

到这里就取不到值了

最后发现是因为下面这个地方写的有问题

 Message msg = Message.obtain();
                        msg.getData().putParcelableArrayList("list",entryList);
                        mHandler.sendEmptyMessage(CONVERT_XML_TO_ENTRY);

sendEmptyMessage,噢 卖糕的。。。。如此低级的错误,写代码还是得小心谨慎,细心

改为sendMessage 一切正常了

原文地址:https://www.cnblogs.com/krislight1105/p/5339158.html