2011-11-30 96 views
2

我正在使用定義JunctionActor的外部包。這個想法是JunctionActor可以通過名爲sendMessage的方法將JSON消息發送到遠程服務器,並通過調用onMessageReceived的偵聽器接收消息。在我的實現中,設備接收它發送的每條消息,因此調用onMessageReceived。然而,在我的代碼中,我在我的Activity類中包含了一個ChatClient對象,它必須調用show_message方法。 show_message觸發一個Toast。當我從onJoin調用show_message時,根本沒有問題,但是當它從onMessageReceived調用時,什麼也沒有顯示,而我的調試器告訴我應用程序確實收到一條消息,並觸發onMessageReceived。與此同時,onJoin方法中的show_message調用實際上起作用。我看不出他們之間的任何區別。 你有解決方案嗎?觸發聽衆的祝酒

非常感謝

public class HelloWorldJunctionActivity extends Activity { 
    onCreate(...){...} [...] 
private class ChatClient extends JunctionActor { 
     public ChatClient() { 
     super("client"); 
     } 
     public void onActivityJoin() { 
      show_message("Connected"); 
     } 
     @Override 
     public void onMessageReceived(MessageHeader header, JSONObject msg) { 
      try { 
      show_message(msg.getString("text")); 
     } catch (JSONException e) { 
      // TODO Auto-generated catch block 
      show_message(e.getMessage()); 
     } 
     } 
} 
void show_message(String message) { 
     Toast 
     .makeText(HelloWorldJunctionActivity.this, message, Toast.LENGTH_SHORT) 
     .show(); 
    } 
} 

回答

2

我不確定JunctionActor是如何工作的,但可能是從不是UI線程的線程調用onMessageReceived回調? 如果出現這種情況,您可能必須使用處理程序,如this post中所述。

+0

JunctionActor由外部jar提供。因爲它是異步的,我想它有效地使用了一個不是UI線程的線程。這真的很有幫助,我會盡快測試。謝謝 –

0

它不敬酒的原因是因爲上下文對象HelloWorldJunctionActivity.this是不存在的。嘗試發送上下文對象以及

空隙show_message(字符串消息,上下文CON){ 吐司 .makeText(CON,消息,Toast.LENGTH_SHORT) .show(); } }

show_message(「Connected」,getApplicationContext());

+1

我的不好,我不夠精確。其實我的活動不是叫做myActivity,而是HelloWorldJunctionActivity。另外,onJoin方法中的show_message調用會觸發一個toast,與onMessageReceived方法相反。 –

+0

如果你收到或沒有收到,我沒有了解。那麼,如果這回答你的問題,然後標記它的答案:) –

+0

你的假設是,show_message不起作用,因爲我沒有通過正確的上下文。但我做到了,我可以看到敬酒信息,所以問題不在那裏。 –