2016-07-26 9 views
1

채팅 응용 프로그램을 만들기 위해 aSmack 및 Openfire 데이터베이스를 사용합니다. 그리고 지금은 로그인하려고 할 때 발생하는 NullPointerException 때문에 스택이 있습니다. 누군가이 문제를 해결할 수 있도록 도와 줄 수 있습니까? 나는 정말로 무엇을해야할지 모른다. 연결, loginUser, 암호가 null이 아닙니다. 이 정보는 내 logcat입니다.로그인 할 수 없습니다. NullPointerException

[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"); 
     } 
    } 

내 로그 캣 :

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) 

고맙습니다. 로그인 (접속)와 같은 "접속"(loginUser, 암호) connection.login ....

다음 IN이다

로그인 할
+0

어디에서 connect()를 호출합니까 ?? – sJy

+0

@sjy 활동의 onCreate 메소드에서 – Steve

+0

어떻게 Smack을 프로젝트에 추가 했습니까? – sJy

답변

0

() 메소드 패스 "XMPPConnection"개체; 나는 그것이 작동합니다 희망

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

와 그 라인을 대체 . 동일한 이름을 가진 두 개의 객체와 충돌하지 마십시오. XMP 연결 번호 & XMPPTCPConnection은 단순하게하기 위해 하나의 이름을 바꿉니다.

referance에

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

해볼 & 여전히 예외가 있다면 알려 주시기 드셔주세요. 감사합니다

+0

미안하지만 저자가 사용하는 aSmack 4.0.0이 원인 때문에 작동하지 않습니다. aSmack 4.1.0을 사용하여 – Steve

관련 문제