从听众触发祝酒词

时间:2011-11-30 19:51:42

标签: java android listener junction

我正在使用定义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 个答案:

答案 0 :(得分:2)

我不确定JunctionActor是如何工作的,但是有可能从不是UI线程的线程调用onMessageReceived回调吗? 如果是这种情况,您可能必须使用处理程序,如this post中所述。

答案 1 :(得分:0)

它不烘烤的原因是因为上下文对象HelloWorldJunctionActivity.this不存在。尝试发送上下文对象

void show_message(String message,Context con){       烤面包         .makeText(con,message,Toast.LENGTH_SHORT)         。节目();   } }

show_message(“已连接”,getApplicationContext());