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建立的公有领域项目.它的设计目标是嵌入式的,而且目前已经在 ...
随机推荐
- js闭包讲解
今日看到之前写的一段js代码,关于导航部分鼠标放上去变类,鼠标离开等效果 前端代码 <div class="con12"> <div class="le ...
- 微信扫描二维码安卓弹出默认浏览器(苹果打开App Store)打开下载链接
使用微信推广的用户经常都会遇到推广链接被拦截导致无法下载app的情况,此时用户在微信中打开会提示“ 已停止访问该网页 ”.这对于使用微信营销的商家来说就很不友好且损失非常大,因为用户是不知道为什么打不 ...
- 2018-2019-2 网络对抗技术 20165335 Exp4 恶意代码分析
实验内容: 一.使用schtacks进行系统运行监控,使用sysmon工具监控系统的具体进程,使用各种工具进行监控,并针对软件的启动回连,安装到目标机,以及其他的控制行为的分析,同时,对主机的注册表, ...
- 打开visual studio 2010报错:未能正确加载“VSTS for Database Professionals Sql Server Data-tier Application”包
1 解决: 运行cmd 2 输入:regsvr32 %windir%\system32\jscript.dll
- OpenCV自带dnn的Example研究(2)— colorization
这个博客系列,简单来说,今天我们就是要研究 6个文件,看看在最新的OpenCV中,它们是如何发挥作用的. 在配置使用的过程中,需要注意使用较高版本的VS避免编译器兼容问题:由于DNN程序的运行依赖于训 ...
- Http协议&Servlet
http协议 针对网络上的客户端 与 服务器端在执行http请求的时候,遵守的一种规范. 其实就是规定了客户端在访问服务器端的时候,要带上哪些东西, 服务器端返回数据的时候,也要带上什么东西. 版本 ...
- 直方图均衡化与Matlab代码实现
昨天说了,今天要好好的来解释说明一下直方图均衡化.并且通过不调用histeq函数来实现直方图的均衡化. 一.直方图均衡化概述 直方图均衡化(Histogram Equalization) 又称直方图平 ...
- vue filters中使用data中数据
vue filters中 this指向的不是vue实例,但想要获取vue实例中data中的数据,可以采用下面方法.在 beforeCreate中将vue实例赋值给全局变量app0,然后filters中 ...
- (转) Using the latest advancements in AI to predict stock market movements
Using the latest advancements in AI to predict stock market movements 2019-01-13 21:31:18 This blog ...
- Redhat终端中文乱码解决
文件中的中文以及命令反馈的中文能够正常显示,但是在终端中用ls等命令查看文件时会出现乱码. 我在i18n文件中加了下面两行内容(本来只有第一行),后来就能正常显示了.