基于openfire+smack开发Android即时聊天应用[一]-用户注册、登陆、修改密码、注销等
来源:互联网 发布:云烟淘宝客鹊桥助手 编辑:程序博客网 时间:2024/05/16 13:01
基于openfire+smack开发Android即时聊天应用[一]-用户注册、登陆、修改密码、注销等
- 开发准备
在官网上下载最新的Smack开发包,我下载的是smack4.1.4版本的,导入相应的jar包即可开始开发工作
1、 客户端和openfire建立连接 连接需要开子线程
1.1 登录openfire第一种写法
private XMPPTCPConnection xmppConnection;if (xmppConnection != null && xmppConnection.isConnected()) { return;}XMPPTCPConnectionConfiguration.Builder configBuilder = XMPPTCPConnectionConfiguration.builder();configBuilder.setHost(host);configBuilder.setPort(port);configBuilder.setUsernameAndPassword(username, password);configBuilder.setServiceName(serviceName);// configBuilder.setCustomSSLContext(SSLContext.getInstance());configBuilder.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled);xmppConnection = new XMPPTCPConnection(configBuilder.build());new Thread() { @Override public void run() { try { xmppConnection.connect(); xmppConnection.login(); } catch (IOException e) { Log.e("XMPP_CONNLOGIN", e.getMessage()); } catch (XMPPException e) { Log.e("XMPP_CONNLOGIN", e.getMessage()); } catch (SmackException e) { Log.e("XMPP_CONNLOGIN", e.getMessage()); } }}.start();
- 1.2 登录openfire第二种写法
private AbstractXMPPConnection mConnection;if (mConnection != null && mConnection.isConnected()) { return;}XMPPTCPConnectionConfiguration build = XMPPTCPConnectionConfiguration.builder() .setServiceName(serviceName) .setHost(host) .setPort(port) //.setUsernameAndPassword(username,password) .setSecurityMode(ConnectionConfiguration.SecurityMode.disabled) .build();mConnection = new XMPPTCPConnection(build);new Thread() { @Override public void run() { try { mConnection.connect(); Log.e("NetUtil.java", "连接服务器成功"); mConnection.login(username, password); Log.e("NetUtil.java", "登录成功"); } catch (IOException e) { Log.e("NetUtil IOException", e.getMessage()); } catch (XMPPException e) { Log.e("NetUtil XMPPException", e.getMessage()); } catch (SmackException e) { Log.e("NetUtil SmackException", e.getMessage()); } }}.start();//启动连接、进行回调监听mConnection.addConnectionListener(new ConnectionListener() { @Override public void connected(XMPPConnection connection) { Log.e("connected", "connection"); // MConnection = (AbstractXMPPConnection) connection; //连接成功回调 } @Override public void authenticated(XMPPConnection connection, boolean resumed) { Log.e("connected", "authenticated"); // 登录鉴权回调 } @Override public void connectionClosed() { Log.e("connected", "connectionClosed"); //连接被关闭回调 } @Override public void connectionClosedOnError(Exception e) { Log.e("connected", "connectionClosedOnError"); //连接被关闭出现异常回调 } @Override public void reconnectionSuccessful() { Log.e("connected", "reconnectionSuccessful"); // 重新连接成功回调 } @Override public void reconnectingIn(int seconds) { Log.e("connected", "reconnectingIn"); // 重新登录成功回调 } @Override public void reconnectionFailed(Exception e) { Log.e("connected", "reconnectionFailed"); // 重新连接失败回调 }});
//编译报错载build中加aaptOptions { cruncherEnabled = false useNewCruncher = false}
- 3、 注册
/*** 注册*/private void register() {Runnable runnable = new Runnable() { @Override public void run() { XMPPTCPConnectionConfiguration configuration = XMPPTCPConnectionConfiguration.builder() .setServiceName(serviceName) .setHost(host) .setPort(port) .setSecurityMode(ConnectionConfiguration.SecurityMode.disabled) .build(); AbstractXMPPConnection conn2 = new XMPPTCPConnection(configuration); try { conn2.connect(); } catch (Exception e1) { e1.printStackTrace(); } AccountManager manager = AccountManager.getInstance(conn2); try { manager.createAccount(accoutUsername, accoutPassword); Log.e("NetUtil", "注册成功"); } catch (SmackException.NoResponseException e) { Log.e("NetUtil SmackException", "连接服务器失败"); e.printStackTrace(); } catch (XMPPException.XMPPErrorException e) { Log.e("NetUtil XMPPException", "该账户已存在"); e.printStackTrace(); } catch (SmackException.NotConnectedException e) { Log.e("NetUtil", "连接服务器失败"); e.printStackTrace(); } }}; ThreadPoolUtil.insertTaskToCatchPool(runnable);}
- 3.1 线程池管理工具类
/** * 线程池管理工具类 * * @ClassName: ThreadPoolUtil * @author yeliangliang * @date 2015-7-24 下午4:17:27 */public class ThreadPoolUtil { public static ExecutorService catchPool = null; public static ExecutorService singlePool = null; public static void insertTaskToCatchPool(Runnable command) { if (catchPool == null) { catchPool = Executors.newCachedThreadPool(); } catchPool.execute(command); } public static void insertTaskToSinglePool(Runnable command) { if (singlePool == null) { singlePool = Executors.newSingleThreadExecutor(); } singlePool.execute(command); } /** * 关闭所有正在执行的线程 * * @author yeliangliang * @date 2015-7-24 下午4:33:19 * @version V1.0 * @return void */ public static void closeAllThreadPool() { if (catchPool != null) { catchPool.shutdownNow(); } if (singlePool != null) { singlePool.shutdownNow(); } }}
- 4、 修改当前登录的用户密码
/** * 修改密码 */private boolean editpassword(String pass) { if (!mConnection.isConnected()) { return false; } try { AccountManager.getInstance(mConnection).changePassword(pass); return true; } catch (SmackException.NoResponseException e) { e.printStackTrace(); Log.e("connect", "连接服务器失败"); return false; } catch (XMPPException.XMPPErrorException e) { e.printStackTrace(); Log.e("connect", "该账户已存在"); return false; } catch (SmackException.NotConnectedException e) { e.printStackTrace(); Log.e("connect", "服务器连接失败"); return false; }}
- 5、 注销账号
/** * 注销 * * @return */public boolean logout() { if (!mConnection.isConnected()) { return false; } try { mConnection.instantShutdown(); return true; } catch (Exception e) { e.printStackTrace(); return false; }}
- 6、 搜索好友
/** * 搜索好友 * * @return void * @author yeliangliang * @date 2015-8-26 下午11:03:42 * @version V1.0 */public void searchFriends(final String keyStr) { Runnable runnable = new Runnable() { @Override public void run() { try { UserSearchManager search = new UserSearchManager(mConnection); //此处一定要加上 search. Form searchForm = search.getSearchForm("search." + mConnection.getServiceName()); Form answerForm = searchForm.createAnswerForm(); answerForm.setAnswer("Username", true); answerForm.setAnswer("search", keyStr); ReportedData data = search.getSearchResults(answerForm, "search." + mConnection.getServiceName()); List<ReportedData.Row> rows = data.getRows(); ListIterator<ReportedData.Row> rowListIterator = rows.listIterator(); while (rowListIterator.hasNext()) { String username = rowListIterator.next().getValues("Username").toString(); Log.e("row", "搜索好友名称username===" + username); } } catch (SmackException.NoResponseException e) { e.printStackTrace(); } catch (XMPPException.XMPPErrorException e) { e.printStackTrace(); } catch (SmackException.NotConnectedException e) { e.printStackTrace(); } } }; ThreadPoolUtil.insertTaskToCatchPool(runnable);}
- 7、 删除当前账号
/** * 删除账号 */private boolean delete() { if (!mConnection.isConnected()) { return false; } try { AccountManager.getInstance(mConnection).deleteAccount(); Log.e("delete", "删除当前账号成功"); return true; } catch (SmackException.NoResponseException e) { e.printStackTrace(); Log.e("delete", "连接服务器失败"); return false; } catch (XMPPException.XMPPErrorException e) { e.printStackTrace(); Log.e("delete", "该账户已存在"); return false; } catch (SmackException.NotConnectedException e) { e.printStackTrace(); Log.e("delete", "服务器连接失败"); return false; }}
阅读全文
0 0
- 基于openfire+smack开发Android即时聊天应用[一]-用户注册、登陆、修改密码、注销等
- 基于openfire+smack开发Android即时聊天应用[一]-用户注册、登陆、修改密码、注销等
- 基于openfire+smack开发Android即时聊天应用[二]-用户注册、登陆、修改密码、注销等
- Android基于XMPP Smack Openfire下学习开发IM(一)实现用户注册、登录、修改密码和注销等
- Android基于XMPP Smack Openfire下学习开发IM(一)实现用户注册、登录、修改密码和注销等
- Android基于XMPP Smack Openfire下学习开发IM(一)实现用户注册、登录、修改密码和注销等
- Android基于XMPP Smack Openfire下学习开发IM(一)实现用户注册、登录、修改密码和注销等
- Android基于XMPP Smack Openfire下学习开发IM(一)实现用户注册、登录、修改密码和注销等
- Android基于XMPP Smack Openfire下学习开发IM(一)实现用户注册、登录、修改密码和注销等
- Android基于XMPP Smack Openfire下学习开发IM(一)实现用户注册、登录、修改密码和注销等
- Android基于XMPP Smack Openfire下学习开发IM(一)实现用户注册、登录、修改密码和注销等
- Android基于XMPP Smack Openfire下学习开发IM(一)实现用户注册、登录、修改密码和注销等
- Android基于XMPP Smack Openfire下学习开发IM(一)实现用户注册、登录、修改密码和注销等
- Android基于XMPP Smack Openfire下学习开发IM(一)实现用户注册、登录、修改密码和注销等
- Android基于XMPP Smack Openfire下学习开发IM(一)实现用户注册、登录、修改密码和注销等
- Android基于XMPP Smack Openfire下学习开发IM(一)实现用户注册、登录、修改密码和注销等
- Android基于XMPP Smack Openfire下学习开发IM(一)实现用户注册、登录、修改密码和注销等
- Android基于XMPP Smack Openfire下学习开发IM(一)实现用户注册、登录、修改密码和注销等
- Go语言登录表单简单示例
- SQL面试题
- n位格雷码
- mac+mamp安装composer
- 找出当前页面执行的所有sql语句
- 基于openfire+smack开发Android即时聊天应用[一]-用户注册、登陆、修改密码、注销等
- R语言-数据分析-快速入门方便查询-excel表格形式学习笔记1
- 手机上Bloom效果trick
- Neo4j 3.2版正式发布:企业级扩展性增强、原生性能提高,还有更多特性
- jsonp跨域访问
- 中文乱码问题
- html表单和超链接的使用
- linux head
- IIC设备驱动程序(十三)————实例解析linux内核I2C体系结构(2)