试图让 Android jabber 应用程序检查新消息中的字符串并返回 toast 消息

Posted

技术标签:

【中文标题】试图让 Android jabber 应用程序检查新消息中的字符串并返回 toast 消息【英文标题】:Trying to get an Android jabber app to check for a string in new messages and return a toast message 【发布时间】:2014-04-22 20:20:27 【问题描述】:

我已经能够创建检查字符串的 if 语句并返回我创建的 toast 消息,但每次我打开聊天时它都会显示 toast 消息。即使最近的消息不包含我要查找的字符串,所以我假设它不会检查它是否是收到的最后一条消息,也不会检查它是否未读。代码如下。我尝试这样做的原因是因为我的父母共享一个 facebook 帐户,并且我想要一种简单的方式来显示消息是否签名为妈妈或爸爸。下面的代码只有在运行后才能检查妈妈,我将添加检查爸爸签名。我正在使用开源消息客户端 Xabber。谢谢你的帮助。

  public void setVisibleChat(String account, String user) 
    final boolean remove = !AccountManager.getInstance()
            .getArchiveMode(account).saveLocally();
    AbstractChat chat = getChat(account, user);
    if (chat == null)
        chat = createChat(account, user);
    else 
        // Mark messages as read and them delete from db if necessary.
        final ArrayList<MessageItem> messageItems = new ArrayList<MessageItem>();
        for (MessageItem messageItem : chat.getMessages()) 
                if (!messageItem.isRead()) 
                messageItem.markAsRead();
                messageItems.add(messageItem);
            

            if (chat.getLastText().contains("Mom") && (!messageItem.isRead()));
                Toast.makeText(Application.getInstance(), "Message from Mom!", Toast.LENGTH_SHORT).show();
            

        
        Application.getInstance().runInBackground(new Runnable() 
            @Override
            public void run() 
                Collection<Long> ids = getMessageIds(messageItems, remove);
                if (remove)
                    MessageTable.getInstance().removeMessages(ids);
                else
                    MessageTable.getInstance().markAsRead(ids);
            
        );
    
    visibleChat = chat;

【问题讨论】:

嗨,我也在尝试在 android xabber 中获得相同的 MessageItem 读取状态。但是 messageItem.isRead() 即使接收者没有打开消息,也总是返回 true。如果你对这个问题有任何想法,你能建议我吗 @Raj 您可能应该发布您的代码,以便该社区中的人们更好地了解可能出现的问题。我的父母买了智能手机后不久我就停止了这个项目的工作,他们设置了个人 FB 帐户,所以我不再需要了。我相信我当时几乎可以完美地工作,但不再有代码了。发布代码,我会尽力帮助您。 嗨,我已将代码 sn-ps 的确切问题作为单独的问题进行了更新。下面是网址。 ***.com/questions/29776948/… 【参考方案1】:

这里多了一个分号

if (chat.getLastText().contains("Mom") && (!messageItem.isRead())); <------

因此,您的下一个包含 Toast show 语句的代码块将始终被执行。

去掉分号

【讨论】:

感谢您的及时回复。不幸的是,现在吐司根本没有出现,我猜我需要更改 if 语句正在检查的内容。 if (chat.getLastText() 一定不是对的。 没问题。您可以在调试模式下运行应用程序,并在代码中设置断点。这将允许您逐步检查并查明问题的原因。如果我的回答对你有帮助,请至少点赞。如果它帮助你解决了问题,请接受它。谢谢 这确实部分工作它仍然没有检查邮件是否未读。但它比以前更好。我不能投票我没有足够的代表。再次,谢谢你。只需要处理 && 语句。 嗨,我也在尝试在 android xabber 中获得相同的 MessageItem 读取状态。但是即使接收者没有打开消息,messageItem.isRead() 也总是返回 true。如果你对这个问题有任何想法,你能建议我吗

以上是关于试图让 Android jabber 应用程序检查新消息中的字符串并返回 toast 消息的主要内容,如果未能解决你的问题,请参考以下文章

使用 Smack 从 2 个不同的 android 设备登录到同一个 jabber 帐户

检查在xmpp服务器中注册的jid(jabber id) - iOS xmpp框架

简单的 smack jabber 程序需要很长时间才能在 android 上连接

如何让 jabber.el 不显示用户图标?

Ejabberd:如何限制获取 jabber 用户目录(JUD)

jabber - 创建房间