2014-10-31 46 views
1

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

我需要做些什麼來克服這個限制?

+0

您msg.what是m_iNormalMsgId;但你不要在你的交換機上處理它 – pskink 2014-10-31 17:01:26

+0

@Simon - 我使用盡可能多的代碼構建了一個示例應用程序,並且該問題不存在。我建議你發佈一個完整的SSCCE(http://sscce.org),以幫助他人看到問題。 – EJK 2014-10-31 17:05:34

+0

你是對的 - 找到我的代碼中的錯誤,並糾正它。感謝每一位試圖幫助我們的人! – Simon 2014-10-31 17:32:55

回答

0

嘗試使用處理程序發送消息。 希望它有助於

msg = m_hMsgHandler.obtainMessage(); 
msg.what = m_iNormalMsgId; 
msg.arg1 = R.integer.activation_lockout; 
msg.obj = new String(strResponse); 
m_hMsgHandler.sendMessage(msg); 

和檢查,你確切地處理該郵件(我上你的樣品中看到設置msg.what = m_iNormalMsgId但在切換過程中的情況下R.integer.msg_progress像msg.arg1 = R.integer .activation_lockout;)

+0

謝謝@HiXoid,爲您評論。剛試過這個,但它仍然將'msg.obj'轉換爲null。 – Simon 2014-10-31 16:55:16

0

這是我想嘗試它:

m_hMsgHandler.sendMessage( 
    m_hMsgHandler.obtainMessage(
     m_iNormalMsgId, 
     R.integer.activation_lockout, 
     0, 
     new String(strResponse) 
); 
+0

我也試過這種方法 - 獲取處理類來填充參數本身,認爲可能有一些線程安全的對象操作正在完成。仍然沒有工作。 – Simon 2014-10-31 16:56:51

+0

瘋狂的理論 - 也許這不工作,因爲字符串不實施Parcelable?也許嘗試將其包裝在一個Bundle對象中,並將obj設置爲Bundle。儘管如此,你也可以在那個時候使用setData(Bundle)。 – 2014-10-31 17:06:06

相關問題