XMPP的android下的登陆,注册等:
2015-08-22 20:44
381 查看
上一节中未提到怎么获取对象:
XMPPConection connection =XMPPConnectionManager.getInstance().getConnection();
以后如果需要用到connection直接传入即可。
下面开始讲注册的实现:
好的,下面开始讲解登陆,登陆的话用继承 AsyncTask实现,实现异步登陆。
LoginTask loginTask = new LoginTask(LoginActivity.this,
username,password);//第一个参数是上下文,第二个就是传入参数用户名密码,没有用户名密码怎么登陆对吧 ,用户名密码自己获取输入框内容就好了。
loginTask.execute();//这句代码就是执行
这样登陆就实现了,是不是很简单啊,下面是修改密码
XMPPConection connection =XMPPConnectionManager.getInstance().getConnection();
以后如果需要用到connection直接传入即可。
下面开始讲注册的实现:
<span style="white-space:pre"> </span>Registration reg = new Registration(); reg.setType(IQ.Type.SET); reg.setTo(connection.getServiceName()); reg.setUsername(usernameEdt.getText().toString()); reg.setPassword(passwdEdt.getText().toString()); reg.addAttribute("android", "geolo_createUser_android"); //System.out.println("reg:" + reg); PacketFilter filter = new AndFilter(new PacketIDFilter(reg .getPacketID()), new PacketTypeFilter(IQ.class)); PacketCollector collector = connection .createPacketCollector(filter); connection.sendPacket(reg); result = (IQ) collector.nextResult(SmackConfiguration .getPacketReplyTimeout()); // Stop queuing results collector.cancel();// 停止请求results(是否成功的结果) if (result == null) { Toast.makeText(getApplicationContext(), "服务器没有返回结果", Toast.LENGTH_SHORT).show(); } else if (result.getType() == IQ.Type.ERROR) { if (result.getError().toString().equalsIgnoreCase( "conflict(409)")) { Toast.makeText(getApplicationContext(), "这个账号已经存在", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(getApplicationContext(), "注册失败", Toast.LENGTH_SHORT).show(); } } else if (result.getType() == IQ.Type.RESULT) { Toast.makeText(getApplicationContext(), "恭喜你注册成功", Toast.LENGTH_SHORT).show(); }这样,注册就完成了,代码比较简单,应该可以理解的,不理解可以在下面留言。
好的,下面开始讲解登陆,登陆的话用继承 AsyncTask实现,实现异步登陆。
/** * * 登录异步任务. */ public class LoginTask extends AsyncTask<String, Integer, Integer> { private ProgressDialog pd; private Context context; private IActivitySupport activitySupport; private String username,password; public LoginTask(IActivitySupport activitySupport,String username,String password) { this.activitySupport = activitySupport; this.username = username;
<span style="white-space:pre"> </span>this,password = password; this.pd = activitySupport.getProgressDialog(); this.context = activitySupport.getContext(); } @Override protected void onPreExecute() { pd.setTitle("请稍等"); pd.setMessage("正在登录..."); pd.show(); super.onPreExecute(); } @Override protected Integer doInBackground(String... params) { return login(); } @Override protected void onProgressUpdate(Integer... values) { } @Override protected void onPostExecute(Integer result) { pd.dismiss(); switch (result) { case Constant.LOGIN_SECCESS: // 登录成功 Toast.makeText(context, "登陆成功", Toast.LENGTH_SHORT).show(); Intent intent = new Intent(); // if (loginConfig.isFirstStart()) {// 如果是首次启动 // intent.setClass(context, GuideViewActivity.class); // loginConfig.setFirstStart(false); // } else { intent.setClass(context, LoginMainActivity.class); // } activitySupport.saveLoginConfig(loginConfig);// 保存用户配置信息 activitySupport.startService(); // 初始化各项服务 context.startActivity(intent); break; case Constant.LOGIN_ERROR_ACCOUNT_PASS:// 账户或者密码错误 Toast.makeText( context, context.getResources().getString( R.string.message_invalid_username_password), Toast.LENGTH_SHORT).show(); break; case Constant.SERVER_UNAVAILABLE:// 服务器连接失败 Toast.makeText( context, context.getResources().getString( R.string.message_server_unavailable), Toast.LENGTH_SHORT).show(); break; case Constant.LOGIN_ERROR:// 未知异常 Toast.makeText( context, context.getResources().getString( R.string.unrecoverable_error), Toast.LENGTH_SHORT) .show(); break; } super.onPostExecute(result); } // 登录 private Integer login() { try { XMPPConnection connection = XmppConnectionManager.getInstance() .getConnection(); connection.connect(); System.out.println("sdasdasd"); connection.login(username, password); // 登录 System.out.println("sdasdasd"); OfflineMsgManager.getInstance(activitySupport).dealOfflineMsg(connection);//处理离线消息 connection.sendPacket(new Presence(Presence.Type.available)); return Constant.LOGIN_SECCESS; } catch (Exception xee) { if (xee instanceof XMPPException) { XMPPException xe = (XMPPException) xee; final XMPPError error = xe.getXMPPError(); int errorCode = 0; if (error != null) { errorCode = error.getCode(); } if (errorCode == 401) { return Constant.LOGIN_ERROR_ACCOUNT_PASS; } else if (errorCode == 403) { return Constant.LOGIN_ERROR_ACCOUNT_PASS; } else { return Constant.SERVER_UNAVAILABLE; } } else { return Constant.LOGIN_ERROR; } } } }然后呢,在点击登陆按钮后就可以执行此段代码就可以了,具体怎么执行呢?请看下面代码:
LoginTask loginTask = new LoginTask(LoginActivity.this,
username,password);//第一个参数是上下文,第二个就是传入参数用户名密码,没有用户名密码怎么登陆对吧 ,用户名密码自己获取输入框内容就好了。
loginTask.execute();//这句代码就是执行
这样登陆就实现了,是不是很简单啊,下面是修改密码
/** * 修改密码 * @param connection * @return */ public static boolean changePassword(XMPPConnection connection,String pwd) { try { connection.getAccountManager().changePassword(pwd); return true; } catch (Exception e) { return false; } }然后是注销:
/** * 注销当前账号 * @param connection * @return */ public static boolean deleteAccount(XMPPConnection connection) { try { connection.getAccountManager().deleteAccount(); return true; } catch (Exception e) { return false; } }传入的connection参数都是一样的,看文章开头。好,差不多了,可以讲下一节了
相关文章推荐
- Android 儿子Activity在启动过程中的流程组件 && 儿子Activity在一个新的进程组件启动过程
- 解决Android SDK Manager下载速度慢的方法
- Android-基本控件(五大布局 Layout)
- [Android随笔]内存泄漏以及内存溢出
- Android-基本控件(CheckBox,RadioGroup,RadioButton)
- Android-基本控件(AutoCompleteTextView,MultiAutoCompleteTextView,ToggleButton)
- c的rand()函数,相同的种子,windows和android下产生的随机数列不一样
- Android(java)学习笔记187:Android中操作XML数据(使用Pull解析器)
- Android,iOS,浏览器打开手机QQ与指定用户聊天界面
- Android异步任务之AsyncTask
- [置顶] android studio 安装出现两个图标
- 解析Android的 消息传递机制Handler
- android 电容屏(四):驱动调试之驱动程序分析篇 -- FocalTech
- android 电容屏(三):驱动调试之驱动程序分析篇
- Android:ViewPager04
- android 电容屏(二):驱动调试之基本概念篇
- android-反编译后重新打包apk文件
- android 电容屏(一)
- 深入理解Android卷III 第8章 深入理解Android壁纸 (节选)
- 深入理解Android卷III 第6章 深入理解控件系统 (节选)