我在創建用於接收消息的處理程序的活動中創建了一個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