2016-03-29 26 views
-1

Bir OpenFire sunucusuna bağlantı kurmaya çalışmak için GitHub'da bulduğum bu eğiticiyi takip ediyorum. Ben daha önce kıvılcım kullandım ve şimdi yolda kullanmak için basit bir android uygulaması oluşturmak için Smack api kullanmaya çalışıyorum. Birkaç öğreticiler takip ve sonunda Github bu tökezledi var: https://github.com/axcl/SMACK-API-Android-DemoSmack ve Openfire'da Giriş Yapamazsınız

Sorun giriş butonu tıklandığında ben OpenFire yönetici panelinde çevrimiçi varlığımı görmüyoruz. İşte

kodudur: ConnectXmpp.java Myxmpp.java

public class Myxmpp { 
private static final String DOMAIN = "192.168.2.14"; 
private static final String HOST = "192.168.2.14"; 
private static final int PORT = 5222; 
private String userName =""; 
private String passWord = ""; 
AbstractXMPPConnection connection ; 
ChatManager chatmanager ; 
Chat newChat; 
XMPPConnectionListener connectionListener = new XMPPConnectionListener(); 
private boolean connected; 
private boolean isToasted; 
private boolean chat_created; 
private boolean loggedin; 


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

} 

// Disconnect Function 
public void disconnectConnection(){ 

    new Thread(new Runnable() { 
     @Override 
     public void run() { 
      connection.disconnect(); 
     } 
    }).start(); 
} 

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(); 
} 


public void sendMsg() { 
    if (connection.isConnected()== true) { 
     // Assume we've created an XMPPConnection name "connection"._ 
     chatmanager = ChatManager.getInstanceFor(connection); 
     newChat = chatmanager.createChat("[email protected]"); 

     try { 
      newChat.sendMessage("Howdy!"); 
     } catch (SmackException.NotConnectedException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

public void login() { 

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

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

} 



//Connection Listener to check connection state 
public class XMPPConnectionListener implements ConnectionListener { 
    @Override 
    public void connected(final XMPPConnection connection) { 

     Log.d("xmpp", "Connected!"); 
     connected = true; 
     if (!connection.isAuthenticated()) { 
      login(); 
     } 
    } 

    @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; 

     chat_created = false; 
     new Thread(new Runnable() { 

      @Override 
      public void run() { 
       try { 
        Thread.sleep(500); 
       } 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 class ConnectXmpp extends Service { 

    private String userName; 
    private String passWord; 
    private Myxmpp xmpp = new Myxmpp(); 

    public ConnectXmpp() { 
    } 

    @Override 
    public void onCreate() { 
     super.onCreate(); 

    } 
    @Override 
    public IBinder onBind(Intent intent) { 
     // TODO: Return the communication channel to the service. 
     return new Localbinder<ConnectXmpp>(this); 
    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) 
    { 
     if(intent != null){ 
      userName = intent.getStringExtra("user"); 
      passWord = intent.getStringExtra("pwd"); 
      xmpp.init(userName, passWord); 
      xmpp.connectConnection(); 
     } 

     return 0; 
    } 

    @Override 
    public void onDestroy() { 
     xmpp.disconnectConnection(); 
     super.onDestroy(); 
    } 

Ana Etkinlik

public class MainActivity extends AppCompatActivity { 

private static final String TAG = "MainActivity"; 
    private ConnectXmpp mService; 
    private View view; 
    private boolean mBounded; 
    private final ServiceConnection mConnection = new ServiceConnection() { 

     @SuppressWarnings("unchecked") 
     @Override 
     public void onServiceConnected(final ComponentName name, 
             final IBinder service) { 
      mService = ((Localbinder<ConnectXmpp>) service).getService(); 
      mBounded = true; 
      Log.d(TAG, "onServiceConnected"); 
     } 

     @Override 
     public void onServiceDisconnected(final ComponentName name) { 
      mService = null; 
      mBounded = false; 
      Log.d(TAG, "onServiceDisconnected"); 
     } 
    }; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.menu_main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     //noinspection SimplifiableIfStatement 
     if (id == R.id.action_settings) { 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 

    //Click Handler for Login Button 
    public void onClickLoginBtn(View view) 
    { 
     try { 
      EditText userId = (EditText) findViewById(R.id.username); 
      EditText userPwd = (EditText) findViewById(R.id.password); 
      String userName = userId.getText().toString(); 
      String passWord = userPwd.getText().toString(); 
      Intent intent = new Intent(getBaseContext(),ConnectXmpp.class); 
      intent.putExtra("user",userName); 
      intent.putExtra("pwd",passWord); 
      startService(intent); 



      //mService.connectConnection(intent); 
     } 
     catch (Exception e) 
     { 
      e.printStackTrace(); 
     } 
    } 




} 

Bunun çok fazla olduğunu biliyorum, ancak bu XMPP ile ilgili gerçekten kafam karıştı. Önceden kayıtlı bir kullanıcıyı nasıl bağlayacağınız konusunda herhangi bir yardım çok takdir edilecektir. Teşekkürler

cevap

0

Merhaba, kodunuzu kontrol ettim ve alan adınızın ve ana bilgisayar adınızın aynı olduğundan emin misiniz? Sorununuza göre, uygulamayı kullanarak xmpp ile giriş yapamazsınız.

Bu github örneğini deneyin. Bu benim adımı yaptı. Herhangi bir sorununuz varsa size yardımcı olabilirim.

https://github.com/saveendhiman/XMPPSample_Studio

bu size yardımcı olacağını umuyoruz ederiz.