2

JunctionActorを定義する外部パッケージを使用しています。JunctionActorは、sendMessageというメソッドを介してリモートサーバーにJSONメッセージを送信し、onMessageReceivedを呼び出すリスナーを介してメッセージを受信できるという考え方です。私の実装では、デバイスは送信するすべてのメッセージを受信するため、onMessageReceivedを呼び出します。それでも、私のコードでは、ChatClientオブジェクトをアクティビティクラスに含めました。このオブジェクトは、show_messageメソッドを呼び出す必要があります。show_messageはトーストをトリガーします。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(String message、Context con){Toast .makeText(con、message、Toast.LENGTH_SHORT).show(); }}

show_message( "Connected"、getApplicationContext());

于 2011-11-30T20:20:59.027 に答える