2016-10-14 9 views
0

Я создаю приложение для Android-андроида, используя библиотеку xmpp smack. Я создал фоновый сервис для прослушивания входящих чатов и использования класса приложения для инициализации объекта соединения xmpp. Проблема заключается функция chatCreated чатов слушателя вызывается дважды поэтому продублировать сообщение появляется .. Это мой класс приложений, где я создал соединениеСообщение получено два раза в библиотеке xmpp smack

Authenticate.java

public class Authenticate extends Application { 

    private static final String DOMAIN = StaticVariables.chatServer; 
    private static final String HOST = StaticVariables.chatServer; 
    private static final int PORT = 5222; 
    static AbstractXMPPConnection connection ; 
    String username,password; 
    private boolean connected; 

    @Override 
    public void onCreate() { 
     super.onCreate(); 

    } 

    public AbstractXMPPConnection initializeXMPPTCPConnection(String username,String password) { 
     Log.e("APPLICATION", "username: "+username); 
     Log.e("APPLICATION", "password: "+password); 
     Log.i("APPLCATION", "initializeXMPPTCPConnection calle:"); 
     this.username=username; 
     this.password=password; 
     XMPPTCPConnectionConfiguration.Builder configBuilder = XMPPTCPConnectionConfiguration.builder(); 
     configBuilder.setUsernameAndPassword(username, password); 
     configBuilder.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled); 
     configBuilder.setResource("Android"); 
     configBuilder.setServiceName(DOMAIN); 
     configBuilder.setHost(HOST); 
     configBuilder.setPort(PORT); 
     configBuilder.setDebuggerEnabled(true); 
     connection = new XMPPTCPConnection(configBuilder.build()); 
     connection=connectConnection(); 
     Log.e("APPLICATION", "initializeXMPPTCPConnection: "+connection.isConnected()); 
     return connection; 
    } 

    public AbstractXMPPConnection getConnection(){ 
     return connection; 
    } 

    public AbstractXMPPConnection connectConnection() 
    { 
     AsyncTask<Void, Void, AbstractXMPPConnection> connectionThread = new AsyncTask<Void, Void, AbstractXMPPConnection>() { 

      @Override 
      protected AbstractXMPPConnection doInBackground(Void... arg0) { 

       // Create a connection 
       try { 
        connection.connect().login(); 
        Log.e("Application", "doInBackground: "+connection.isConnected()); 
        //login(); 
        connected = true; 
        //sendMsg(); 

       } catch (IOException e) { 
        e.printStackTrace(); 
       } catch (SmackException e) { 
        e.printStackTrace(); 
       } catch (XMPPException e) { 
        e.printStackTrace(); 
       } 

       return connection; 
      } 

      @Override 
      protected void onPostExecute(AbstractXMPPConnection connection2) { 
       super.onPostExecute(connection2); 
//    sendMsg(message.getText().toString()); 
       Log.e("APPLICATION", "onPostExecute: "+connection2.isConnected()); 
       connection=connection2; 
      } 
     }; 
     try { 
      connection=connectionThread.execute().get(); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } catch (ExecutionException e) { 
      e.printStackTrace(); 
     } 
     Log.e("Application", "connectConnection: "+connection.isConnected()); 
     return connection; 
    } 

    public void login() { 

     try { 
      connection.login(username, password); 
      Log.e("APPLICATIPN", "Yey! We're connected to the Xmpp server!"); 

     } catch (XMPPException | SmackException | IOException e) { 
      e.printStackTrace(); 
     } catch (Exception e) { 
     } 

    } 



} 

Это код через который я звоню экземпляр соединения функция

connection=((Authenticate)getApplication()).getConnection(); 

Слушатель

public void listenChat(String name){ 
      ChatManager manager = ChatManager.getInstanceFor(connection); 
      manager.addChatListener(new ChatManagerListener() { 

       @Override 
       public void chatCreated(final Chat chat, boolean createdLocally) { 
        System.out.println("Created chat"); 
        chat.addMessageListener(new ChatMessageListener() { 

         @Override 
         public void processMessage(final Chat chat, final org.jivesoftware.smack.packet.Message message) { 
//This is called twice 

          } 
         } 
        }); 

       } 
      }); 
     } 

Я новичок в Android, и как хорошо xmpp.Please скажите мне, где я не прав, как я могу решить это

+0

только предложение, не переводите главный вход в классе приложения. создайте отдельный синглтон. и где ваше соединение connectConnection, listenChat и initializeXMPPConnection получает вызов? – Farhan

+0

убедитесь, что сколько раз называется listenChat() этот метод, я думаю, что он называется два раза так ... –

ответ

0

Вы должны исправить использование createdLocally в методе chatCreated.

Просто добавьте слушателя, если не createdLocally так:

public void chatCreated(Chat chat, boolean createdLocally) 
      { 
       if (!createdLocally) 
       { 
        chat.addMessageListener(new ChatMessageListener()...); 
       } 
      } 

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

  • Нет связанных вопросов^_^