android使用smack实现简单登录功能
android端采用xmpp协议实现即时通讯,在最开始的登录功能就遇到了不少障碍。首先在官网(https://www.igniterealtime.org/projects/openfire/)下载openfire服务器以及smack,openfire部署到本机,如何部署网上有很多教程,可以搜索一下,为了以后便于测试,可以将自己电脑的ip设置为固定的IP地址;smack是一个压缩包,里面包含了很多jar包,但是想要连接服务器,smack中的jar包是不够的,还需要jxmpp-core-0.6.3.jar、jxmpp-jid-0.6.3.jar、minidns-core-0.3.0.jar、jxmpp-util-cache-0.6.3.jar以上jar包就是我在登陆过程中使用的除smack中的包以外的jar包,其实这些jar包是可以在网上下载到的,smack中的包只需要选取其中一部分用来满足登录服务,比如我这里就用了

可能有些包是多余的,,但是如果随意添加其他的smack中的包,也可能引发错误,我也是新手,所以导包操作也是查看其它博客的,大家导包方面有问题也可以查阅相关博客,下面就是代码方面的问题了,这里的登录界面很简单,就是两个EditText以及一个登录按钮,主要是XMPP连接那一部分,我是这样写的,网上也有很多,大同小异。
public class XmppUtil {
//private final static String host = "192.168.43.208"; //这个ip地址就是被我固定的本机ip
private final static int port = 5222;
//private String serveName = "192.168.43.208";
public static boolean login(String username, String password)
{
XMPPTCPConnectionConfiguration.Builder configBuilder = XMPPTCPConnectionConfiguration.builder();
try {
configBuilder.setXmppDomain("192.168.43.208"); //在部署openfire域的时候,用的也是这个ip,因此此处填的是ip,具体根据你填的域来确定
configBuilder.setHost("192.168.43.208");
configBuilder.setHostAddress(InetAddress.getByName("192.168.43.208"));
configBuilder.setPort(port);
configBuilder.setSecurityMode(XMPPTCPConnectionConfiguration.SecurityMode.disabled);
configBuilder.enableDefaultDebugger();
configBuilder.setUsernameAndPassword(username, password);
XMPPTCPConnection connection = new XMPPTCPConnection(configBuilder.build());
connection.connect();
connection.login();
return true;
} catch (UnknownHostException e) {
e.printStackTrace();
Log.v("XMPPUTIL","InetAddress");
// return false;
} catch (InterruptedException e) {
e.printStackTrace();
// return false;
} catch (IOException e) {
e.printStackTrace();
// return false;
} catch (SmackException e) {
e.printStackTrace();
// return false;
} catch (XMPPException e) {
e.printStackTrace();
// return false;
}
return false;
}
}
下面就是点击登录的逻辑操作,因为登录时耗时操作,因此在此处我们新建立一个线程,实现登录功能
在MainActivity.java中
public class MainActivity extends AppCompatActivity {
EditText edit_username;
EditText edit_password;
Button btn;
Handler handler = new Handler()
{
@Override
public void handleMessage(Message msg) {
if(msg.what == 1000)
{
Toast.makeText(MainActivity.this, "登录成功,用户名:" + msg.getData().get("username").toString() + "密码:" +
msg.getData().get("password").toString()
,Toast.LENGTH_LONG).show();
}
else if(msg.what == 1001)
{
Toast.makeText(MainActivity.this,"登录失败", Toast.LENGTH_SHORT).show();
}
super.handleMessage(msg);
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn = findViewById(R.id.login);
edit_username = (EditText)findViewById(R.id.edit_username);
edit_password = (EditText)findViewById(R.id.edit_pass);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(edit_username.getText().toString().equals("") || edit_password.getText().toString().equals(""))
{
Toast.makeText(MainActivity.this,"用户及密码信息不能为空",Toast.LENGTH_SHORT).show();
return;
}
else
{
checkAcount(edit_username.getText().toString(),edit_password.getText().toString());
}
}
});
}
private void checkAcount(final String username, final String password) {
new Thread(){
@Override
public void run() {
if(XmppUtil.login(username, password))
{
Message msg = new Message();
Bundle data = new Bundle();
data.putString("username",username);
data.putString("password",password);
msg.setData(data);
msg.what = 1000;
handler.sendMessage(msg);
}
else
{
handler.sendEmptyMessage(1001);
}
super.run();
}
}.start();
}
}
还有一点就是需要开通网络访问权限
在AndroidManifest.xml中添加

安装在android手机上进行测试,打开openfire服务器,并使得你的手机和电脑连接在同一个局域网下应该就可以了。
参看:https://blog.csdn.net/hu285279904/article/details/47341403
https://blog.csdn.net/u013403478/article/details/50612661
android使用smack实现简单登录功能的更多相关文章
- Android开发之自己主动登录功能的实现
在我们平时使用的手机应用都能够实现仅仅须要登陆一次账号后,第二次进入应用直接跳转到效果界面的效果,还有QQ的登陆框是怎样记忆我们的隐身登陆,保存账号选项的呢,这些都是通过使用SharedPrefere ...
- springmvc+mybatis+sql server实现简单登录功能
一.源码: 1.Users.java package com.login.entity; import java.io.Serializable; public class Users impleme ...
- Android Studio—增删改查—登录功能
SQLite数据库的常用操作: create table if not exists 表名(字段1 类型(长度),字段2 类型(长度),...)// 建表 drop table if ex ...
- Struts2开发环境搭建,及一个简单登录功能实例
首先是搭建Struts2环境. 第一步 下载Struts2去Struts官网 http://struts.apache.org/ 下载Struts2组件.截至目前,struts2最新版本为2.3.1. ...
- python之Flask实现登录功能
网站少不了要和数据库打交道,归根到底都是一些增删改查操作,这里做一个简单的用户登录功能来学习一下Flask如何操作MySQL. 用到的一些知识点:Flask-SQLAlchemy.Flask-Logi ...
- Java Web实现用户登录功能
java web 学习记录一下 mvc结构实现mysql 连接 什么是mvc MVC是模型(model).视图(view).控制(controller)这三个单词上的首字母组成.它是一种应用模型,它的 ...
- Android 学习笔记之如何实现简单相机功能
PS:看来算法和数据结构还是非常有用的,以后每天都练习两道算法题目...这次忘了对代码进行折叠了..导致篇幅过长... 学习内容: 1.Android如何实现相机功能... 2.如何实现音频的录制.. ...
- 为Android游戏接入第三方登录功能
1. “游戏客户端”调用“SDK客户端”的登录功能向“SDK服务端”进行身份认证 2. 验证通过后,“游戏客户端”可得到用户信息,根据游戏逻辑可将用户信息传给“游戏服务器”进行验证 3. “游戏服务器 ...
- Android Studio 通过一个登录功能介绍SQLite数据库的使用
前言: SQLite简介:是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中.它是D.RichardHipp建立的公有领域项目.它的设计目标是嵌入式的,而且目前已经在 ...
随机推荐
- 论文阅读(Weilin Huang——【arXiv2016】Accurate Text Localization in Natural Image with Cascaded Convolutional Text Network)
Weilin Huang——[arXiv2016]Accurate Text Localization in Natural Image with Cascaded Convolutional Tex ...
- SQL中内连接和外连接的区别
数据表的连接有: 1.内连接(自然连接): 只有两个表相匹配的行才能在结果集中出现 2.外连接: 包括 (1)左外连接(左边的表不加限制) (2)右外连接(右边的表不加限制) (3)全外连接(左右两表 ...
- python-列表与元组
列表(List) 特性: 列表也是一种Sequence 类型 下标 能切片 可以存储任何类型的数据,每个元素是任意类型,可以存放任 ...
- vue单文件组件实例2:简单单文件组件
Introduce.vue: <template> <div class="intro"> 单位介绍 </div> </templat ...
- PLS-00357: Table,View Or Sequence reference 'SEQ_TRADE_RECODE.NEXTVAL' not allowed in this context
oracle数据库: 为了使ID自增,建了序列后,创建触发器: create or replace TRIGGER TRIG_INSERT_TRADE_RECODE BEFORE INSERT ON ...
- js中的数组方法
数组的方法有数组原型方法,也有从object对象继承来的方法,这里我们只介绍数组的原型方法,数组原型方法主要有以下这些: join()push()和pop()shift() 和 unshift()so ...
- 2019/4/19 wen 线程2
- 设计模式理解(十)结构型——享元(Flyweight)
最后一个结构型,享元.没有太多的项目经验,对这种模式只有一种概念上的理解,就是为了节约内存等资源,把可重用的东西只申请一次,然后处处调用,同时用Hash进行管理. 直接上图: 代码: /******* ...
- nginx+php+mysql+zabbix服务器安装
好久没有接触监控类的软件了,今天抽空搭建了下 首先系统环境 zabbix-server-1 centos7.2 本次所需的第三方软件包 以下软件包通过官网下载 zabbix-3.0.3.tar. ...
- Android中粗字体
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页面里面有普通字体.中粗字体.加粗字体.对于IOS的小伙伴,分分钟搞定,但是对于Android开发的我,瞬间懵逼了.WTF! 安卓只有粗和不 ...