我在创建用于接收消息的处理程序的活动中创建了一个UI。Android:从单独线程发送的消息将obj设置为空
然后我启动第二个线程进行网络通信。第二个线程通过UI线程处理程序将消息发送回UI线程。
只要我发送整数值,所有工作正常。 但是,如果将obj
值设置为诸如字符串之类的对象,则当它到达处理程序时,它将被设置为空。
处理程序声明如下:
private static class MsgHandler extends Handler
{
private CommsActivity m_parent;
public MsgHandler(CommsActivity parent)
{
m_parent = parent;
}
@Override
public void handleMessage(Message msg)
{
switch(msg.what)
{
case R.integer.msg_progress :
m_parent.ShowProgress(msg.arg1);
break;
case R.integer.msg_error :
m_parent.ShowError(msg.arg1, (String)msg.obj);
break;
}
}
}
当我需要从第二个线程发送一个消息,我把它以这种方式:
msg = m_hMsgHandler.obtainMessage();
msg.what = m_iNormalMsgId;
msg.arg1 = R.integer.activation_lockout;
msg.obj = new String(strResponse);
msg.sendToTarget();
的MsgHandler
实例传递到该线程可作为参数运行并存储供以后使用。
我也试过使用Bundle
实例,但是这也设置为NULL。
请注意,我正在使用Android 4.4。
我需要做些什么来克服这个限制?
您msg.what是m_iNormalMsgId;但你不要在你的交换机上处理它 – pskink 2014-10-31 17:01:26
@Simon - 我使用尽可能多的代码构建了一个示例应用程序,并且该问题不存在。我建议你发布一个完整的SSCCE(http://sscce.org),以帮助他人看到问题。 – EJK 2014-10-31 17:05:34
你是对的 - 找到我的代码中的错误,并纠正它。感谢每一位试图帮助我们的人! – Simon 2014-10-31 17:32:55