Une fonction qui ne se lance pas sous android

Fl4v Messages postés 3 Date d'inscription lundi 6 août 2012 Statut Membre Dernière intervention 6 août 2012 - 30 nov. 2011 à 18:37
Fl4v Messages postés 3 Date d'inscription lundi 6 août 2012 Statut Membre Dernière intervention 6 août 2012 - 30 nov. 2011 à 22:51
Bonjour !

J'ai un problème auquel je ne comprends pas grand chose. J'utilise un package externe qui me fournit des outils permettant de communiquer entre plusieurs devices, qui s'appelle Junction. Le principe est que le téléphone se connecte à un serveur, lui envoie des messages sous forme de JSON, puis le serveur redistribue ces messages à tous les participants qui lui sont connectés. On envoie des messages via la méthode sendMessage d'un objet JunctionActor, et un listener onMessageReceived, toujours dans cet objet, permet de récupérer les messages communiqués par ce serveur de façon asynchrone.
Je définis donc une classe ChatClient héritant de JunctionActor au sein de mon activité principale, dans lequel j'override la méthode onMessageReceived pour qu'elle fasse appel à la méthode show_message qui déclenche un Toast (contenant le message reçu, qui ici ne peut être que "Hello !"), un message étant envoyé par le bouton btn.
Le soucis est que quand je débogue, l'application me dit qu'elle a bien reçu un message (onMessageReceived est bien déclenché) mais aucun Toast ne s'affiche... J'ai tenté d'incrémenter un entier au moment où onMessageReceived était activé, et ça marchait.
Est-ce que mon appel de méthode est mal fait dans onMessageReceived ?
Ci-joint, le bout de code d'intérêt :
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();
  }


J'ajoute qu'un toast contenant "connected" s'affiche bien, ce n'est donc pas un problème venant complètement de show_message...

Auriez-vous une solution ?

Merci beaucoup

2 réponses

Twinuts Messages postés 5373 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 10 août 2022 110
30 nov. 2011 à 22:24
Salut,


simple question tu dis:

onMessageReceived est bien déclenché


ça veut dire quoi pour toi? que tu passes bien dans la callback ou que tu passes dedans et que la méthode msg.getString("text") te retourne bien la chaîne "Hello !" et non une chaîne vide.

Dans le cas où tu n'es pas certain que la méthode retourne une chaîne non vide peux-tu essayer (si ce n'est pas déjà fait) d'appeler ta méthode comme suit:
show_message("Message: '" + msg.getString("text") + "'");






------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

OoWORAoO
0
Fl4v Messages postés 3 Date d'inscription lundi 6 août 2012 Statut Membre Dernière intervention 6 août 2012
30 nov. 2011 à 22:51
Salut !
Le debugger me dit bien que l'objet JSON contient "Hello !", pas de pb de ce côté.
J'ai posé cette question autre part, et on m'a dit qu'il était possible que onMessageReceived soit appelé par un Thread qui n'est pas celui de l'UI, et donc que j'aurais besoin d'un Handler.
0