基於XMPP和openfire(服務器)實現即時通訊中的用戶登錄功能

基於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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章