2017-02-27 227 views
0

有两个用户AB如何从openfire聊天记录一对一聊天

  • 首先登录并且B已经离线。
  • A发送消息至B
  • 现在是要在线但无法得到的消息是什么一个 已发送到
  • 如果同时在不同的设备都记录和 两者聊天然后消息发送和接收是完全完成 。

帮助我如何获得一对一聊天的聊天记录?

这是发送消息:

public void sendTextMessage(View v) { 
     String message = msg_edittext.getEditableText().toString(); 
     if (!message.equalsIgnoreCase("")) { 
      final ChatMessage chatMessage = new ChatMessage(user1, user2, 
        message, "" + random.nextInt(1000), false); 
      chatMessage.setMsgID(); 
      chatMessage.body = message; 
      chatMessage.Date = CommonMethods.getCurrentDate(); 
      chatMessage.Time = CommonMethods.getCurrentTime(); 
      msg_edittext.setText(""); 
      chatAdapter.add(chatMessage); 
      chatAdapter.notifyDataSetChanged(); 
      //MainActivity activity = ((MainActivity) context); 
      getmService().xmpp.sendMessage(chatMessage); 
     } 
    } 

public void sendMessage(ChatMessage chatMessage) 
    { 
     String body = gson.toJson(chatMessage); 
     if (!chat_created) 
     { 
      Mychat = ChatManager.getInstanceFor(connection).createChat(
        chatMessage.receiver + "@" 
          + "sspl163", 
        mMessageListener); 
      chat_created = true; 
     } 

     final Message message = new Message(); 
     message.setBody(body); 
     message.setStanzaId(chatMessage.msgid); 
     message.setType(Message.Type.chat); 

     try { 
      if (connection.isAuthenticated()) 
       Mychat.sendMessage(message); 
      else 
       login(); 
     } 
     catch (NotConnectedException e) { 
      Log.e("xmpp.SendMessage()", "msg Not sent!-Not Connected!"); 

     } 
     catch (Exception e) {} 
    } 

这是用于检索信息:

private class MMessageListener implements ChatMessageListener 
    { 

     public MMessageListener(Context contxt) {} 

     @Override 
     public void processMessage(final org.jivesoftware.smack.chat.Chat chat, final Message message) 
     { 
      if (message.getType() == Message.Type.chat && message.getBody() != null) 
      { 
       final ChatMessage chatMessage = gson.fromJson(message.getBody(), ChatMessage.class); 
       processMessage(chatMessage); 
      } 
     } 

     private void processMessage(final ChatMessage chatMessage) 
     { 
      chatMessage.isMine = false; 
      SharedPreferences shared = context.getSharedPreferences("MyPREFERENCES", MODE_PRIVATE); 
      String user = (shared.getString("username", "")); 
      if(chatMessage.receiver.equalsIgnoreCase(user) && Chats.user2.equalsIgnoreCase(chatMessage.sender)) 
       Chats.chatlist.add(chatMessage); 
      new Handler(Looper.getMainLooper()).post(new Runnable() { 

       @Override 
       public void run() { 
        Chats.chatAdapter.notifyDataSetChanged(); 
       } 
      }); 
     } 
    } 
+0

您的问题是'没有得到用户B的离线消息'对吗? –

+0

是的,B无法获得消息 –

+0

检查您的openfire设置作为我的答案。 –

回答

0

首先检查从Web管理您的Openfire设置

服务器 - >服务器设置 - >离线消息并检查您的设置

对我而言以下工作。

enter image description here

+0

我已更改每个用户脱机消息存储限制为1000 kb,并选择始终存储选项但仍无法获取脱机消息。 –

+0

首先从所有设备注销,并通过任何xmpp客户端(Spark)登录检查。脱机工作或不在此。 –

+0

根据您所关心的所有消息只在火花监控,那么我将如何显示它在我的应用程序 –