2015-09-01 1 views
-1

В настоящее время я пишу ниже код для подключения к серверу OpenFire, во всех действиях (или говорят фрагменты):андроида: создать глобальное соединение, чтобы открыть огонь с помощью Смак API 4.1.3

XMPPTCPConnectionConfiguration config = XMPPTCPConnectionConfiguration.builder() 
       .setServiceName(HOST) 
       .setHost(HOST) 
       .setPort(PORT) 
       .setSecurityMode(ConnectionConfiguration.SecurityMode.disabled) 
       .setDebuggerEnabled(true).build(); 
conn = new XMPPTCPConnection(config); 
conn.connect(); 

А потом , Я выполняю свои задачи, такие как авторизация пользователя и аутентификация (вход в систему), получение списков и т. Д.

Есть ли другой способ создать где-нибудь глобальное соединение, так что мне не нужно создавать соединение каждый раз.

Я хочу, чтобы реализация выполнялась так же, как только при каждом запуске приложения она должна была создать соединение с сервером Openfire только один раз, и после этого я должен был бы использовать одно и то же соединение для любого из Activity (или фрагмента).

ответ

1

Используйте следующие синглтон класс:

public class XMPPConnectionManager { 

    String serviceName = "SERVICENAME"; 
    String host = "HOST"; 
    int port = 5222; 
    XMPPTCPConnectionConfiguration.Builder configBuilder; 
    AbstractXMPPConnection connection; 
    boolean setSecurityModeOn = false; 
    boolean shouldLogin = true; 

    private static XMPPConnectionManager instance = null; 

    private XMPPConnectionManager(){} 

    public static XMPPConnectionManager getInstance() { 
     if(instance == null) { 
      instance = new XMPPConnectionManager(); 
     } 
     return instance; 
    } 

    public void connect(String username, String password){ 

     XMPPTCPConnectionConfiguration.Builder configBuilder = XMPPTCPConnectionConfiguration.builder(); 
     configBuilder.setUsernameAndPassword(username, password); 
     configBuilder.setServiceName(serviceName); 
     configBuilder.setHost(host); 
     configBuilder.setPort(port); 
     if(!setSecurityModeOn) { 
      configBuilder.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled); 
     } 

     connection = new XMPPTCPConnection(configBuilder.build()); 
     try { 
      connection.connect(); 
      if(shouldLogin) { 
       connection.login(); 
      } 

     } catch (SmackException e) { 

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

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

      e.printStackTrace(); 
     } 
    } 
    public void logUserIn(){ 
     try { 
      connection.login(); 
     } catch (XMPPException e) { 
      e.printStackTrace(); 
     } catch (SmackException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

    public void disconnect(){ 
     if(connection != null) { 
      connection.disconnect(); 
     } 
    } 
    public AbstractXMPPConnection getConnection() { 
     return connection; 
    } 

    public XMPPTCPConnectionConfiguration.Builder getConfigBuilder() { 
     return configBuilder; 
    } 

    public void setConfigBuilder(XMPPTCPConnectionConfiguration.Builder configBuilder) { 
     this.configBuilder = configBuilder; 
    } 

    public void setConnection(AbstractXMPPConnection connection) { 
     this.connection = connection; 
    } 

    public void setHost(String host) { 
     this.host = host; 
    } 



    public void setPort(int port) { 
     this.port = port; 
    } 

    public void setSetSecurityModeOn(boolean setSecurityModeOn) { 
     this.setSecurityModeOn = setSecurityModeOn; 
    } 

    public void setServiceName(String serviceName) { 
     this.serviceName = serviceName; 
    } 

    public void setShouldLogin(boolean shouldLogin) { 
     this.shouldLogin = shouldLogin; 
    } 
} 

Применение:

XMPPConnectionManager.getInstance().connect("username","password"); 

Чтобы получить соединение в любом другом классе/активности, просто получить класс одноплодной менеджера снова, как это:

AbstractXMPPConnection connection = XMPPConnectionManager.getInstance().getConnection(); 

Если что-то не так, сообщите мне.