2

我正在使用定义 JunctionActor 的外部包。这个想法是,JunctionActor 可以通过名为 sendMessage 的方法将 JSON 消息发送到远程服务器,并通过调用 onMessageReceived 的侦听器接收消息。在我的实现中,设备接收它发送的每条消息,因此调用 onMessageReceived。然而,在我的代码中,我在我的活动类中包含了一个 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();
  }
}
4

2 回答 2

2

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

于 2011-11-30T20:40:04.207 回答
0

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

void show_message(字符串消息,上下文 con){ Toast .makeText(con,消息,Toast.LENGTH_SHORT).show();} }

show_message("已连接", getApplicationContext());

于 2011-11-30T20:20:59.027 回答