2016-12-25 1 views
0

J'ai créé une application de messagerie et je souhaite en informer les utilisateurs lorsqu'un autre utilisateur leur envoie un message. Mais je ne peux pas en garder trace dans mon ContactListActivity alors j'essaie de l'afficher dans ma classe connection.java (il suffit de faire apparaître un texte lors de l'affichage de contactList si un nouveau message arrive). Voici ce que j'ai essayé de faireImpossible d'afficher un toast à partir d'une classe de non-activité (Android)

private final Context mApplicationContext; 
public Connection(context c){ 
mApplicationContext = c.getApplicationContext(); 
/.... 
} 
    System.out.println("Print something"); 
    Toast.makeText(mApplicationContext, " You received a message from "+contactJid, Toast.LENGTH_LONG).show(); //Is called everytime when I receive a message. 
    System.out.printnl("Print something"); // I can print both, I receive the message but toast does not appear 

Ne vous inquiétez pas des noms de variables. Comment puis-je accomplir mon objectif? J'utilise mApplicationContext dans d'autres endroits et il fait ce que je veux qu'il fasse.

J'ai également essayé de créer un nouvel objet ContactListActivity dans cette classe et d'obtenir son contexte d'application, il a également échoué La rétroaction constructive est appréciée, donc je peux clarifier la question.

+0

Vous obtenez une réponse ici? et pourquoi vous envoyez un contexte de l'extérieur puis en utilisant getApplicationContext() dessus. Pouvez-vous montrer d'où vous appelez Connection() – Rahul

+0

Hmm semble que j'ai écrit la mauvaise chose que je mets à jour, il devrait être c.getApplicationContext(). Toast est appelé à chaque fois que je reçois un nouveau message – Prethia

+0

Avez-vous imprimer le journal et vérifié que vous obtenez la réponse – Rahul

Répondre

1

Si vous obtenez une réponse dans les journaux, il se peut qu'il s'agisse d'un problème d'unité d'exécution autre que l'interface utilisateur. Rien ne se mettra à jour ou ne s'affichera sur l'interface utilisateur à partir du thread de travail, mettez à jour votre interface utilisateur à partir du thread principal uniquement.

Handler handler = new Handler(Looper.getMainLooper()); 
handler.post(new Runnable() { 
    @Override 
    public void run() { 
    //Here you can update your UI 
    } 
}); 
+0

La raison est correcte et l'extrait de code fonctionne, j'accepte la réponse – Prethia