2016-08-18 6 views
1

Smack APIを使用してメッセージを送受信しようとしていますが、スレッドの問題によって別のクラスでメッセージを送信できませんでした。しかし、今、私はMainActivityのすべてのコードを移植しましたが、server.Belowとの接続は私のMainActivity.classです。MainActivityでsmack APIを使用してサーバーと接続するandroid

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(); 
    } 
関連する問題