2016-12-24 54 views
0

我已经在我的Android应用程序中成功实现了一对一聊天。我已经使用SQLite在应用程序数据库中保存两个用户之间的聊天。但是当用户卸载应用程序时,这个聊天会被删除。我需要知道的是,我如何在我的服务器上保存两个用户之间的聊天,因此每当用户重新安装应用程序或登录任何其他设备时,他都可以看到他以前的聊天记录。我在我的ejabberd服务器上启用了mod_archive和mod_mam,并且能够在应用程序中检索离线消息。由于从自定义eJabberd服务器检索聊天记录

+2

甚至我还停留在内部监督办公室在同一地点:( – Gulshan

+0

@Paritosh我在iOS也有同样的问题请让我知道,如果你有它的答案 –

+0

@MaheshNarla我仍然陷在这里,一旦我有一个完美的解决方案,我一定会让你知道。 –

回答

3

您需要按照XEP - 0136

http://xmpp.org/extensions/xep-0136.html

对于揍你需要得到它的方式如下:

public void loadArchiveMessages(Jid jid, XMPPTCPConnection xmppTcpConnection){ 
     try { 
      MamManager mamManager=MamManager.getInstanceFor(xmppTcpConnection); 
      MamManager.MamQueryResult mamQueryResult = mamManager.queryArchive(jid); 
      List<Forwarded> forwardedMessages=mamQueryResult.forwardedMessages; 
      Iterator<Forwarded> forwardedIterator=forwardedMessages.iterator(); 
      while (forwardedIterator.hasNext()){ 
       Forwarded forwarded=forwardedIterator.next(); 
       Stanza stanza=forwarded.getForwardedStanza(); 
       if (stanza instanceof Message) { 
        String messageId=stanza.getStanzaId(); 
        xmppTcpConnection.processMessage((Message) stanza); 
       } 
      } 
     } catch (XMPPException.XMPPErrorException e) { 
      e.printStackTrace(); 
     } catch (SmackException.NotLoggedInException e) { 
      e.printStackTrace(); 
     } catch (SmackException.NotConnectedException e) { 
      e.printStackTrace(); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } catch (SmackException.NoResponseException e) { 
      e.printStackTrace(); 
     } 
    } 
+0

嗨Jaspreet !!感谢您的回答。我试图在我的应用程序中实现此代码,但我无法解析Android Studio中的MamManager和Jid。我可以知道你在Forwarded类中使用的字符串吗?请让我知道我是否缺少任何东西。 –

+0

package org.jivesoftware.smackx.mam; UPVOTE请 –

+1

嗨Jaspreet .. !!再次感谢你的回复。我在导入的库中找不到这个软件包。对不起,如果我在这里问任何愚蠢的问题,但我是新的这个蹩脚的实施。是否有任何jar文件或更新版本的smack库。我目前正在使用4.1.9版本。当我搜索更多关于从服务器检索聊天记录时,我遇到了一个新的过程,即将自定义IQ发送到服务器。你能否向我解释一下你的方法与自定义智商部分有何不同。在这个过程中更多的指导是非常值得赞赏的。提前致谢。 –