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 用户权限 )

android 21 是啥版本

Android逆向-Android基础逆向(2-2)

【Android笔记】android Toast

图解Android - Android核心机制

Android游戏开发大全的目录