试图让 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 上连接