2016-07-26 3 views
1

Я использую базу данных aSmack и Openfire для создания приложения чата. И теперь я стек из-за NullPointerException, который возникает, когда я пытаюсь войти. Может ли кто-нибудь помочь мне решить эту проблему? Я действительно не знаю, что делать. Причина подключения, loginUser, пароль не равно нулю. Эта информация из моего логарифма.Не удается войти в систему, NullPointerException

соединение org.jivesoftwa[email protected]

AJ1 loginUser

password54 пароль

Мой код:

public void connect() { 
     Thread t = new Thread(new Runnable() { 

      @Override 
      public void run() { 
       XMPPTCPConnectionConfiguration.Builder ConnectionConfiguration = XMPPTCPConnectionConfiguration.builder(); 
       ConnectionConfiguration.setServiceName("lucky"); 
       ConnectionConfiguration.setHost("192.168.100.5"); 
       ConnectionConfiguration.setPort(5222); 
       ConnectionConfiguration.setSecurityMode(org.jivesoftware.smack.ConnectionConfiguration.SecurityMode.disabled); 
       ConnectionConfiguration.setDebuggerEnabled(true); 
       connection = new XMPPTCPConnection(ConnectionConfiguration.build()); 
       XMPPConnectionListener xmppConnectionListener = new XMPPConnectionListener(); 
       connection.addConnectionListener(xmppConnectionListener); 
       try { 

        connection.connect(); //Error here 

       } catch (SmackException.ConnectionException e) { 
        // e.printStackTrace(); 
        Log.e("Point_1","Exception " + e); 
       } catch (SmackException e) { 
        e.printStackTrace(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } catch (XMPPException e) { 
        e.printStackTrace(); 
       } 
      } 
     }); 
     t.start(); 
    } 
public class XMPPConnectionListener implements ConnectionListener { 
     @Override 
     public void connected(XMPPConnection connection) { 
      if(!connection.isAuthenticated()){ 

       login(); //Error here 

       Log.e("Point_login", "XMPPListener, login()"); 
      } 
      connected = true; 
      Log.e("Point_login", "XMPPListener, connected()"); 
     } 

     @Override 
     public void authenticated(XMPPConnection connection, boolean resumed) { 
      loggedin = true; 
      Log.e("Point_login", "XMPPListener, authenticated"); 
     } 

     @Override 
     public void connectionClosedOnError(Exception e) { 
      Log.e("Point_login", "XMPPListener, connectinClosedOnError " + e); 
      loggedin = false; 
      connected = false; 
      isChatCreated = false; 
     } 

     @Override 
     public void connectionClosed() { 
      loggedin = false; 
      connected = false; 
      isChatCreated = false; 
      Log.e("Point_login", "XMPPListener, connectionClosed"); 
     } 

     @Override 
     public void reconnectingIn(int seconds) { 
      loggedin = false; 
      Log.e("Point_login", "XMPPListener, reconnectingIn"); 
     } 

     @Override 
     public void reconnectionFailed(Exception e) { 
      loggedin = false; 
      connected = false; 
      isChatCreated = false; 
      Log.e("Point_login", "XMPPListener, reconnectionFailed"); 
     } 

     @Override 
     public void reconnectionSuccessful() { 
      loggedin = false; 
      connected = true; 
      isChatCreated = false; 
      Log.e("Point_login", "XMPPListener, reconnectionSuccessful"); 
     } 


    } 
public void login(){ 
     try{ 
      Log.e("Point_login", String.valueOf(connection) + " connection"); 
      Log.e("Point_login", String.valueOf(loginUser) + " loginUser"); 
      Log.e("Point_login", String.valueOf(password) + " password"); 

      connection.login(loginUser,password); //Error here 

     }catch(SmackException.NotConnectedException e){ 
      Log.e("Login_1","Exception"); 
      for(int i=0;i<=5;i++){ 
       new Thread(new Runnable() { 
        @Override 
        public void run() { 
         try { 
          Thread.sleep(1000); 
         }catch (InterruptedException e){ 
          e.printStackTrace(); 
         } 
        } 
       }).start(); 
      } 
     }catch(XMPPException | SmackException | IOException e){ 
      e.printStackTrace(); 
      Log.e("Login_1","2nd Exception"); 
     } 
    } 

Мой LogCat:

E/AndroidRuntime﹕ FATAL EXCEPTION: Thread-2634 
    java.lang.NullPointerException 
      at org.jivesoftware.smack.util.stringencoder.Base64.encode(Base64.java:64) 
      at org.jivesoftware.smack.util.stringencoder.Base64.encode(Base64.java:60) 
      at org.jivesoftware.smack.util.stringencoder.Base64.encodeToString(Base64.java:42) 
      at org.jivesoftware.smack.sasl.SASLMechanism.authenticate(SASLMechanism.java:199) 
      at org.jivesoftware.smack.sasl.SASLMechanism.authenticate(SASLMechanism.java:169) 
      at org.jivesoftware.smack.SASLAuthentication.authenticate(SASLAuthentication.java:236) 
      at org.jivesoftware.smack.tcp.XMPPTCPConnection.loginNonAnonymously(XMPPTCPConnection.java:365) 
      at org.jivesoftware.smack.AbstractXMPPConnection.login(AbstractXMPPConnection.java:452) 
      at org.jivesoftware.smack.AbstractXMPPConnection.login(AbstractXMPPConnection.java:427) 
      at com.lets.dothis.myapplication.XMPP.login(XMPP.java:180) 
      at com.lets.dothis.myapplication.XMPP$XMPPConnectionListener.connected(XMPP.java:206) 
      at org.jivesoftware.smack.AbstractXMPPConnection.callConnectionConnectedListener(AbstractXMPPConnection.java:1152) 
      at org.jivesoftware.smack.tcp.XMPPTCPConnection.connectInternal(XMPPTCPConnection.java:841) 
      at org.jivesoftware.smack.AbstractXMPPConnection.connect(AbstractXMPPConnection.java:360) 
      at com.lets.dothis.myapplication.XMPP$1.run(XMPP.java:150) 
      at java.lang.Thread.run(Thread.java:856) 

Спасибо.

+0

От кого вы называете connect() ?? – sJy

+0

@sjy From onCreate method in Activity – Steve

+0

Как вы добавили Smack в свой проект? – sJy

ответ

0

В входа() метод прохода "XMPPConnection" объект, который "соединение", как логин (подключение)

затем, IN .... connection.login (loginUser, пароль); заменить эту строку с

if(!connection.isAuthenticated()) 
      login(connection, loginUser, passwordUser); 
else connection.login(loginUser, passwordUser); 

Я надеюсь, что это будет работать. Пожалуйста, не вступайте в конфликт с двумя объектами с одинаковым именем XMPPConnection & XMPPTCPСоединение, для простоты просто переименуйте одно.

Referance

http://xmpp-tutorials.blogspot.com.br/

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

+0

Прошу прощения, но это не работает для меня, потому что автор использовал aSmack 4.0.0, m с помощью aSmack 4.1.0 – Steve

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