android端采用xmpp协议实现即时通讯,在最开始的登录功能就遇到了不少障碍。首先在官网(https://www.igniterealtime.org/projects/openfire/)下载openfire服务器以及smack,openfire部署到本机,如何部署网上有很多教程,可以搜索一下,为了以后便于测试,可以将自己电脑的ip设置为固定的IP地址;smack是一个压缩包,里面包含了很多jar包,但是想要连接服务器,smack中的jar包是不够的,还需要jxmpp-core-0.6.3.jarjxmpp-jid-0.6.3.jarminidns-core-0.3.0.jarjxmpp-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实现简单登录功能的更多相关文章

  1. Android开发之自己主动登录功能的实现

    在我们平时使用的手机应用都能够实现仅仅须要登陆一次账号后,第二次进入应用直接跳转到效果界面的效果,还有QQ的登陆框是怎样记忆我们的隐身登陆,保存账号选项的呢,这些都是通过使用SharedPrefere ...

  2. springmvc+mybatis+sql server实现简单登录功能

    一.源码: 1.Users.java package com.login.entity; import java.io.Serializable; public class Users impleme ...

  3. Android Studio—增删改查—登录功能

    SQLite数据库的常用操作: create table if not exists 表名(字段1 类型(长度),字段2 类型(长度),...)//       建表 drop table if ex ...

  4. Struts2开发环境搭建,及一个简单登录功能实例

    首先是搭建Struts2环境. 第一步 下载Struts2去Struts官网 http://struts.apache.org/ 下载Struts2组件.截至目前,struts2最新版本为2.3.1. ...

  5. python之Flask实现登录功能

    网站少不了要和数据库打交道,归根到底都是一些增删改查操作,这里做一个简单的用户登录功能来学习一下Flask如何操作MySQL. 用到的一些知识点:Flask-SQLAlchemy.Flask-Logi ...

  6. Java Web实现用户登录功能

    java web 学习记录一下 mvc结构实现mysql 连接 什么是mvc MVC是模型(model).视图(view).控制(controller)这三个单词上的首字母组成.它是一种应用模型,它的 ...

  7. Android 学习笔记之如何实现简单相机功能

    PS:看来算法和数据结构还是非常有用的,以后每天都练习两道算法题目...这次忘了对代码进行折叠了..导致篇幅过长... 学习内容: 1.Android如何实现相机功能... 2.如何实现音频的录制.. ...

  8. 为Android游戏接入第三方登录功能

    1. “游戏客户端”调用“SDK客户端”的登录功能向“SDK服务端”进行身份认证 2. 验证通过后,“游戏客户端”可得到用户信息,根据游戏逻辑可将用户信息传给“游戏服务器”进行验证 3. “游戏服务器 ...

  9. Android Studio 通过一个登录功能介绍SQLite数据库的使用

    前言: SQLite简介:是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中.它是D.RichardHipp建立的公有领域项目.它的设计目标是嵌入式的,而且目前已经在 ...

随机推荐

  1. js闭包讲解

    今日看到之前写的一段js代码,关于导航部分鼠标放上去变类,鼠标离开等效果 前端代码 <div class="con12"> <div class="le ...

  2. 微信扫描二维码安卓弹出默认浏览器(苹果打开App Store)打开下载链接

    使用微信推广的用户经常都会遇到推广链接被拦截导致无法下载app的情况,此时用户在微信中打开会提示“ 已停止访问该网页 ”.这对于使用微信营销的商家来说就很不友好且损失非常大,因为用户是不知道为什么打不 ...

  3. 2018-2019-2 网络对抗技术 20165335 Exp4 恶意代码分析

    实验内容: 一.使用schtacks进行系统运行监控,使用sysmon工具监控系统的具体进程,使用各种工具进行监控,并针对软件的启动回连,安装到目标机,以及其他的控制行为的分析,同时,对主机的注册表, ...

  4. 打开visual studio 2010报错:未能正确加载“VSTS for Database Professionals Sql Server Data-tier Application”包

    1  解决: 运行cmd 2  输入:regsvr32 %windir%\system32\jscript.dll

  5. OpenCV自带dnn的Example研究(2)— colorization

    这个博客系列,简单来说,今天我们就是要研究 6个文件,看看在最新的OpenCV中,它们是如何发挥作用的. 在配置使用的过程中,需要注意使用较高版本的VS避免编译器兼容问题:由于DNN程序的运行依赖于训 ...

  6. Http协议&Servlet

    http协议 针对网络上的客户端 与 服务器端在执行http请求的时候,遵守的一种规范. 其实就是规定了客户端在访问服务器端的时候,要带上哪些东西, 服务器端返回数据的时候,也要带上什么东西. 版本 ...

  7. 直方图均衡化与Matlab代码实现

    昨天说了,今天要好好的来解释说明一下直方图均衡化.并且通过不调用histeq函数来实现直方图的均衡化. 一.直方图均衡化概述 直方图均衡化(Histogram Equalization) 又称直方图平 ...

  8. vue filters中使用data中数据

    vue filters中 this指向的不是vue实例,但想要获取vue实例中data中的数据,可以采用下面方法.在 beforeCreate中将vue实例赋值给全局变量app0,然后filters中 ...

  9. (转) 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 ...

  10. Redhat终端中文乱码解决

    文件中的中文以及命令反馈的中文能够正常显示,但是在终端中用ls等命令查看文件时会出现乱码. 我在i18n文件中加了下面两行内容(本来只有第一行),后来就能正常显示了.