监听器中的Toast无法工作

4

我想打开一个Toast,但是在监听器(Smack的)中好像不起作用,比如这个例子:

private ChatManagerListener chatManagerListener = new ChatManagerListener() {

    public void chatCreated(Chat newChat, boolean createdLocally) {
        if(!createdLocally) {

            Toast.makeText(mCtx, "CHAT CREATED", Toast.LENGTH_SHORT).show();

            // do some stuff

        }
    }
}; 

如果我在类的其他地方使用Toast代码,只要它不是一个监听器,它就可以工作。

1
删除条件...并检查 - Nishant Shah
1
尝试将mCtx替换为getApplicationContext()并获取返回结果。 - Hanry
3个回答

7
runOnUiThread(new Runnable() {  
   @Override  
   public void run() {  
      Toast.makeText(Activity.this, "import finished", Toast.LENGTH_SHORT).show();  
   }  
});

但是你怎么知道这段代码正在另一个线程中运行?!我有什么地方错过了吗? - zaPlayer
1
如果你正在寻找真正的答案,那么这里就是。从他的回调函数来看,似乎他正在使用一个聊天库,在另一个线程上有回调,因为它不是设计用于在Android上运行。 - Mohammad Ersan

1

确保您分配了适当的上下文。您的mCtx应该是父类的上下文。尝试像这样分配它:ParentClassName.this


0

你确定它在if条件语句里吗? 如果是的话,我认为你没有理解上下文。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接