基於XMPP和openfire(服務器)實現即時通訊中的用戶登錄功能
初學Android 現在想利用openfire作爲服務器,基於XMPP協議寫一個即時聊天的android應用,
現在整理一下實現即時通訊中的用戶登錄功能,有不當之處,敬請指出,共同學習進步。
** XMPP實現簡單登錄功能(利用openfire作爲服務器) **
用戶登錄可能會出現登錄不上,出現異常的情況,所以登錄這一部分就需要try和catch一下
以下是我的思維步驟:
Try{
1. 創建連接配置對象config
a) 用到的類:ConnectionConfiguration(HOST, PORT);
b) HOST是主機ip地址,windows系統在cmd命令行裏輸入ipconfig可以查詢到ipv4
c) PORT是服務器佔用的端口號(openfire的PORT爲5222)
2.對連接配置對象進行配置
a)調用config的setSecurity(ConnectConfiguration.SecurityMode.disabled);
//即禁用安全模式,明文傳輸
b)開啓調試模式,config.setDebuggerEnable(true);
3.創建XMPP連接對象
XMPPConnection conn = new XMPPConnection(config)
4.開始連接服務器(此時並沒有登錄上服務器,只能說這個時候conn對象能與服務器之間傳送數據)
conn.connect();
5.登錄服務器
conn.login(username, password);//用戶名和密碼
}
catch(XMPPException e){
e.printStackTrace();
//提示連接失敗
Toast一下就可以了。
}
LoginActivity.java:
package com.example.luhui.lizi20160831;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import org.jivesoftware.smack.ConnectionConfiguration;
import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.XMPPException;
import utils.PreferencesUtils;
import utils.ThreadUtils;
import utils.ToastUtils;
public class LoginActivity extends Activity {
private static final String HOST = "192.168.2.100";//在這裏改成自己的ip
private static final int PORT = 5222;
private EditText et_account , et_password;
private Button login ;
String account , password;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
initView();
initListener();
}
private void initListener() {
login.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
account = et_account.getText().toString();
password = et_password.getText().toString();
if (TextUtils.isEmpty(account)) {
ToastUtils.showToast(LoginActivity.this, "賬號不能爲空");
return;
}
if (TextUtils.isEmpty(password)) {
ToastUtils.showToast(LoginActivity.this, "密碼不能爲空");
return;
}
ThreadUtils.runInThread(new Runnable() {
@Override
public void run() {
try {
ConnectionConfiguration config = new ConnectionConfiguration(HOST, PORT);
/*
額外的配置
*/
config.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled);//禁用安全模式,明文傳輸
config.setDebuggerEnabled(true);//開啓調試模式
//創建鏈接對象
XMPPConnection conn = new XMPPConnection(config);
//開始鏈接
conn.connect();
//登錄
conn.login(account, password);
//鏈接成功
ToastUtils.showToast(LoginActivity.this, "登錄成功");
Intent intent = new Intent(LoginActivity.this, ContactActivity.class);
startActivity(intent);
finish();
} catch (XMPPException e) {
e.printStackTrace();
//提示鏈接失敗
ToastUtils.showToast(LoginActivity.this, "登錄失敗,請檢查賬號和密碼是否正確");
}
}
});
}
});
}
private void initView() {
et_password = (EditText) findViewById(R.id.et_password);
et_account = (EditText)findViewById(R.id.et_account);
login = (Button) findViewById(R.id.btn_login);
}
}
activity_login.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.luhui.lizi20160831.LoginActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center">
<ImageView
android:id="@+id/img_login"
android:layout_width="80dp"
android:layout_height="80dp"
android:src="@drawable/login_default_avatar"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center"
android:layout_marginTop="10dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="賬號: "
android:textSize="20dp"/>
<EditText
android:id="@+id/et_account"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:hint="請輸入賬號"
android:text="luhui"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="密碼: "
android:textSize="20dp"/>
<EditText
android:id="@+id/et_password"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:hint="請輸入密碼"
android:text="123456"
android:password="true"/>
</LinearLayout>
<Button
android:id="@+id/btn_login"
android:layout_width="260dp"
android:layout_height="wrap_content"
android:background="@drawable/btn_login_selector"
android:layout_marginTop="15dp"
android:text="登錄"
android:textSize="28dp"
android:textColor="#ffffff"/>
</LinearLayout>
</RelativeLayout>
Android Studio工程百度雲鏈接:http://pan.baidu.com/s/1eSOCrx4