Question

J'utilise un package externe définissant un JunctionActor. L'idée est qu'un JunctionActor peut envoyer des messages JSON à un serveur distant via une méthode appelée sendMessage et recevoir des messages via un écouteur appelant onMessageReceived. Dans ma mise en œuvre, l'appareil reçoit chaque message qu'il envoie, appelant ainsi onMessageReceived. Pourtant, dans mon code, j'ai inclus un objet ChatClient dans ma classe d'activité, qui doit appeler la méthode show_message. show_message déclenche un toast. Quand je vous appelle show_message de onJoin, il n'y a pas de problème du tout, mais quand il est appelé à partir onMessageReceived, rien ne montre, alors que mon débogueur me dit que l'application reçoit en effet un message et que onMessageReceived est déclenché. Dans le même temps, l'appel de show_message dans la méthode onJoin fonctionne réellement. Et je ne vois aucune différence entre les deux. Avez-vous une solution?

Merci beaucoup

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();
  }
}
Était-ce utile?

La solution

Je ne sais pas comment fonctionne JunctionActor, mais est-il possible que le rappel onMessageReceived est appelé à partir d'un fil qui est pas le fil de l'interface utilisateur? Si tel est le cas, vous pourriez avoir à utiliser un gestionnaire, comme expliqué dans ce message .

Autres conseils

La raison pour laquelle il n'est pas parce que l'un toast objet de contexte HelloWorldJunctionActivity.this est inexistant. Essayez d'envoyer l'objet de contexte et

show_message void (String message, Contexte con) { Pain grillé .makeText (con, message, Toast.LENGTH_SHORT) .spectacle(); } }

show_message ( "connecté", getApplicationContext ());

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top