2016-08-18 2 views
1

Smack API를 사용하여 메시지를 보내고 보내려하지만 일부 스레드 문제로 인해 별도의 클래스에서 메시지를 보내려하지 않았습니다. 하지만 지금은 MainActivity에있는 모든 코드를 포팅 할 때 server.Below와의 연결을 만들 수 없을 것입니다. 내 MainActivity.class입니다.MainActivity android에서 smack API를 사용하여 서버에 연결

public class chatActivity extends AppCompatActivity { 
    private static final String DOMAIN = "192.168.0.109"; 
    private static final String HOST = "192.168.0.109"; 
    private static final int PORT = 5222; 
    private String userName =""; 
    private String passWord = ""; 
    AbstractXMPPConnection connection ; 
    ChatManager chatmanager ; 
    Chat newChat; 
    ChatManager chatManager; 
    XMPPConnectionListener connectionListener = new XMPPConnectionListener(); 
    private boolean connected; 
    private boolean isToasted; 
    private boolean chat_created; 
    private boolean loggedin; 
    Context context; 
    private MultiUserChat multiUserChat; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_chat); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 
     Thread t = new Thread(new Runnable() { 
      @Override 
      public void run() { 
       init("user123","user123"); 
      } 
     }); 
t.start(); 

    } 

    public void init(String userId,String pwd) { 
     Log.i("XMPP", "Initializing!"); 
     this.userName = userId; 
     this.passWord = pwd; 
     this.context = context; 
     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.addConnectionListener(connectionListener); 

    } 
    public class XMPPConnectionListener implements ConnectionListener { 
     @Override 
     public void connected(final XMPPConnection connection) { 

      Log.d("xmpp", "Connected!"); 
      connected = true; 


      if (!connection.isAuthenticated()) { 
       System.out.println("Hellooooooooo11111"); 
       login(); 

       new Handler(Looper.getMainLooper()).post(new Runnable() { 

        @Override 
        public void run() { 
//      // TODO Auto-generated method stub 
//new MainActivity().updateText(context); 

        } 
       }); 

      } 
     } 

     @Override 
     public void connectionClosed() { 
      if (isToasted) 

       new Handler(Looper.getMainLooper()).post(new Runnable() { 

        @Override 
        public void run() { 
         // TODO Auto-generated method stub 


        } 
       }); 
      Log.d("xmpp", "ConnectionCLosed!"); 
      connected = false; 
      chat_created = false; 
      loggedin = false; 
     } 

     @Override 
     public void connectionClosedOnError(Exception arg0) { 
      if (isToasted) 

       new Handler(Looper.getMainLooper()).post(new Runnable() { 

        @Override 
        public void run() { 

        } 
       }); 
      Log.d("xmpp", "ConnectionClosedOn Error!"); 
      connected = false; 

      chat_created = false; 
      loggedin = false; 
     } 

     @Override 
     public void reconnectingIn(int arg0) { 

      Log.d("xmpp", "Reconnectingin " + arg0); 

      loggedin = false; 
     } 

     @Override 
     public void reconnectionFailed(Exception arg0) { 
      if (isToasted) 

       new Handler(Looper.getMainLooper()).post(new Runnable() { 

        @Override 
        public void run() { 



        } 
       }); 
      Log.d("xmpp", "ReconnectionFailed!"); 
      connected = false; 

      chat_created = false; 
      loggedin = false; 
     } 


     @Override 
     public void reconnectionSuccessful() { 
      if (isToasted) 

       new Handler(Looper.getMainLooper()).post(new Runnable() { 

        @Override 
        public void run() { 
         // TODO Auto-generated method stub 



        } 
       }); 
      Log.d("xmpp", "ReconnectionSuccessful"); 
      connected = true; 

      chat_created = false; 
      loggedin = false; 
     } 

     @Override 
     public void authenticated(XMPPConnection arg0, boolean arg1) { 
      Log.d("xmpp", "Authenticated!"); 
      loggedin = true; 
      // joinChatRoom(); 
      // sendMsg(); 
      chat_created = false; 
      //sendMessage("body","jid"); 
      //sendMsg(); 
      new Thread(new Runnable() { 

       @Override 
       public void run() { 
        try { 
         Thread.sleep(500); 
         // sendMsg(); 
        } catch (InterruptedException e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        } 

       } 
      }).start(); 
      if (isToasted) 

       new Handler(Looper.getMainLooper()).post(new Runnable() { 

        @Override 
        public void run() { 
         // TODO Auto-generated method stub 



        } 
       }); 
     } 
    } 
    public void login() { 

     try { 
      connection.login(userName, passWord); 
      // sendMsg(); 
      //Log.i("LOGIN", "Yey! We're connected to the Xmpp server!"); 

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

    } 
} 

질문 내가 헤로인 API를 사용하는 방법, 나는 모든 메인 클래스에서이 네트워크 작업을 처리하는 방법이 그것을 얻고 있지 않다이다.
나는 그것을 Asynch에서도 실행하려고 시도했다.

답변

0

좋아요. 해결책을 찾았습니다. 내 메인 클래스에 다음 메소드를 추가하는 것을 잊어 버렸습니다.

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

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

       // Create a connection 
       try { 
        connection.connect(); 
        login(); 
        connected = true; 

       } catch (IOException e) { 
       } catch (SmackException e) { 

       } catch (XMPPException e) { 
       } 

       return null; 
      } 
     }; 
     connectionThread.execute(); 
    } 
관련 문제