Android smack.util.StringUtil 没有 parseBareAddress
Posted
技术标签:
【中文标题】Android smack.util.StringUtil 没有 parseBareAddress【英文标题】:Android smack.util.StringUtil does not have parseBareAddress 【发布时间】:2016-12-22 22:07:29 【问题描述】:我一直在寻找不同的方法来支持我的应用程序中的离线消息传递,但这些示例中的每一个都包括 parseBareAdress 并且 android Studio 给出了错误,指出它无法解析 parseBareAdress。它可以解决其他所有问题。这是我的代码
import org.jivesoftware.smack.util.StringUtils;
public static void handleOfflineMessages(XMPPConnection connection, Context ctx)throws Exception
OfflineMessageManager offlineMessageManager = new OfflineMessageManager(connection);
if (!offlineMessageManager.supportsFlexibleRetrieval())
Log.d(TAG,"Offline messages not supported");
return;
if (offlineMessageManager.getMessageCount() == 0)
Log.d(TAG,"No offline messages found on server");
else
List<Message> msgs = offlineMessageManager.getMessages();
for (Message msg : msgs)
String fullJid = msg.getFrom();
String bareJid = StringUtils.parseBareAddress(fullJid);
String messageBody = msg.getBody();
if (messageBody != null)
Log.d(TAG,"Retrieved offline message from " +messageBody);
offlineMessageManager.deleteMessages();
这是我的依赖项
compile 'org.igniterealtime.smack:smack-android-extensions:4.1.0-alpha6'
compile 'org.igniterealtime.smack:smack-tcp:4.1.0-alpha6'
【问题讨论】:
我一直在寻找相同的答案。 这是个问题,但您可以手动拆分地址。我有一个更大的问题,我无法收到离线消息可以吗? 是的,我可以。如果您有任何具体问题,请在个人对话中联系我,我可能会提供帮助。 我无法以我目前的声誉开始个人对话。能否提供成功接收离线消息的sn-p? 更多的是与你的服务器设置有关。转到服务器设置并检查您为“离线消息”设置的内容。如果您选择“存储”,然后在“客户端连接”下选择一个空闲时间,超过该时间用户将断开连接,您将能够接收离线消息。 【参考方案1】:用这个自定义方法替换StringUtils.parseBareAddress(fullJid)
:
/**
* Input: user@server/Smack || user@server-035<br>
* user<br>
* @param jid
* @return bareAddress
*/
public static String parseBareAddress(String jid)
Pattern regex = Pattern.compile("(.+)(@.+)");
Matcher matcher = regex.matcher( jid );
if (matcher.matches())
return matcher.group(1);
return jid; //safe condition
【讨论】:
以上是关于Android smack.util.StringUtil 没有 parseBareAddress的主要内容,如果未能解决你的问题,请参考以下文章
Android 逆向Android 权限 ( Android 逆向中使用的 android.permission 权限 | Android 系统中的 Linux 用户权限 )