2015-01-19 3 views
0

Я начинаю общаться в чате. Я искал и изучал серверы xmpp. Я установил сервер openfire xmpp. Соединение с серверами xmpp, задачами регистрации и входа в систему. Теперь я пытаюсь отправить и получить сообщение. После того, как пользователь получит логин и после этого, когда пользователь вводит текст для отправки. Я использовал этот код, чтобы отправить сообщениеотправка и получение сообщения через xmpp на android

ChatManager chatmanager; 
    chatmanager = connection.getChatManager(); 
    Chat newChat = chatmanager.createChat("cac6ba9dc9c6ac67"+"@pc", FirstPage.this); 

       try { 
        newChat.sendMessage("Howdy!"); 
       } 
       catch (XMPPException e) { 
        System.out.println("Error Delivering block"); 
       } 

@Override 
    public void processMessage(Chat chat, Message message) { 
     // TODO Auto-generated method stub 
     Toast.makeText(FirstPage.this,"mssg: "+message.getBody(), Toast.LENGTH_SHORT).show(); 
     switch (message.getType()) 
     { 
     case chat: 
      String jsonData = (null==message.getBody())?"":message.getBody(); 

      System.out.println(jsonData); 
      System.out.println(chat.getParticipant()); 
      break; 
     case error: 
      break; 
     case groupchat: 
      break; 
     case headline: 
      break; 
     case normal: 

      break; 
     } 
    } 

и этот код, я использую для получения сообщения, любезно увидеть по этой screenshot видеть пользователей,

chatmanager.addChatListener(this); 
     PacketFilter filter = new MessageTypeFilter(Message.Type.chat); 
     connection.addPacketListener(this, filter); 

@Override 
    public void chatCreated(Chat chat, boolean createdlocally) { 
     // TODO Auto-generated method stub 
     // System.out.println("1 message received "+chat.getParticipant()); 

     if (!createdlocally) { 
      System.out.println("not created locally"); 
      Toast.makeText(FirstPage.this, "not created locally", Toast.LENGTH_SHORT).show(); 
      chat.addMessageListener(new MessageListener() { 

       @Override 
       public void processMessage(Chat arg0, Message arg1) { 
        // TODO Auto-generated method stub 
        //tv1.setText(arg1.getBody()); 
       } 
      }); 
     } else { 
      Toast.makeText(FirstPage.this, "created locally", Toast.LENGTH_SHORT).show(); 
      System.out.println("created locally"); 
     } 
    } 

    @Override 
    public void processPacket(Packet packet) { 
     // TODO Auto-generated method stub 
     System.out.println("in processPacket"); 
     Message message = (Message) packet; 
     String body = message.getBody(); 
     String from = message.getFrom(); 
     tv1.setText("From "+from + "\n"+ body); 
    } 

Я использую этот код не знаю, почему сообщение не посылает через другую сторону Может кто-нибудь, пожалуйста, что ошибка, которую я делаю или помочь в решении этой проблемы

+0

сделал и установить соединение и войти в систему? –

+0

Да, я установил соединение и сделал логин также, не могли бы вы прийти через это [link] (http://chat.stackoverflow.com/rooms/68853/trying-to-learn), чтобы помочь мне решить эту проблему. –

ответ

1

Я нашел решение для этого:

Для отправки сообщения

private ArrayList<String> messages = new ArrayList<String>(); 
    private Handler mHandler = new Handler(); 
@Override 
    public void onClick(View v) { 
     // TODO Auto-generated method stub 
     switch (v.getId()) { 
     case R.id.btnsendmsg: 

      String to = "[email protected]"; 

      String text = edgetmsg.getText().toString(); 
      Message msg = new Message(to, Message.Type.chat); 
      msg.setBody(text); 
      if (connection != null) { 
       connection.sendPacket(msg); 
       messages.add(connection.getUser() + ": " + text); 
       //messages.add(connection.getUser() + ":"); 
       //messages.add(text); 
       Log.v("text send", connection.getUser().toString()); 
       Toast.makeText(FirstPage.this, "txt send", 
         Toast.LENGTH_SHORT).show(); 
       setListAdapter(); 
       Roster roster = connection.getRoster(); 
       Collection<RosterEntry> entries = roster.getEntries(); 
       for (RosterEntry entry : entries) { 
        Log.d("XMPPChatDemoActivity", 
          "--------------------------------------"); 
        Log.d("XMPPChatDemoActivity", "RosterEntry " + entry); 
        Log.d("XMPPChatDemoActivity", 
          "User: " + entry.getUser()); 
        Log.d("XMPPChatDemoActivity", 
          "Name: " + entry.getName()); 
        Log.d("XMPPChatDemoActivity", 
          "Status: " + entry.getStatus()); 
        Log.d("XMPPChatDemoActivity", 
          "Type: " + entry.getType()); 
        Presence entryPresence = roster.getPresence(entry 
          .getUser()); 
        Log.d("XMPPChatDemoActivity", "Presence Status: " 
          + entryPresence.getStatus()); 
        Log.d("XMPPChatDemoActivity", "Presence Type: " 
          + entryPresence.getType()); 
        Presence.Type type = entryPresence.getType(); 
        if (type == Presence.Type.available) 
         Log.d("XMPPChatDemoActivity", "Presence AVIALABLE"); 
        Log.d("XMPPChatDemoActivity", "Presence : " 
          + entryPresence); 
        // entryPresence.setPriority(1); 
        // connection.sendPacket(entryPresence); 
        // Toast.makeText(XMPPChatDemoActivity.this, 
        // "gettting user", Toast.LENGTH_SHORT).show(); 
       } 

      } else { 
       Log.i("XMPPChatDemoActivity", "no massage send"); 
       Log.e("XMPPChatDemoActivity", "Failed to log in as " 
         + connection.getUser()); 
      } 

      break; 
     } 
    } 

вызов setConnection (соединение); после получения входа пользователя

Для получения сообщения:

public void setConnection(XMPPConnection connection) { 
     this.connection = connection; 
     if (connection != null) { 
      // Add a packet listener to get messages sent to us 
      PacketFilter filter = new MessageTypeFilter(Message.Type.chat); 
      connection.addPacketListener(new PacketListener() { 
       @Override 
       public void processPacket(Packet packet) { 
        Message message = (Message) packet; 
        if (message.getBody() != null) { 
         String fromName = StringUtils.parseBareAddress(message 
           .getFrom()); 
         Log.i("XMPPChatDemoActivity", "Text Recieved " 
           + message.getBody() + " from " + fromName); 
         messages.add(fromName + ": " + message.getBody()); 
         //messages.add(fromName + ":"); 
         //messages.add(message.getBody()); 
         // Add the incoming message to the list view 
         mHandler.post(new Runnable() { 
          public void run() { 
           setListAdapter(); 
          } 
         }); 
        } 
       } 
      }, filter); 
     } 
    } 
+2

addPacketListener показывает устаревшее предупреждение. любая другая альтернатива? –

Смежные вопросы