Android 基于XMPP Smack Openfire 小结怎么解决

 我来答
百度网友ded4135
高粉答主

2016-02-06 · 醉心答题,欢迎关注
知道大有可为答主
回答量:2.7万
采纳率:87%
帮助的人:1.2亿
展开全部
  首先第一、与服务器建立好连接
  关键代码:127.0.0.1为服务器IP,5222为服务器端口号

  [java] view plain copy print?
  /**
  * 连接服务器
  *
  * @return
  */
  public boolean conServer() {
  ConnectionConfiguration config = new ConnectionConfiguration(
  127.0.0.1, 5222);
  /** 是否启用安全验证 */
  config.setSASLAuthenticationEnabled(false);
  /** 是否启用调试 */
  // config.setDebuggerEnabled(true);
  /** 创建connection链接 */
  try {
  connection = new XMPPConnection(config);
  /** 建立连接 */
  connection.connect();
  return true;
  } catch (XMPPException e) {
  e.printStackTrace();
  }
  return false;
  }

第二、实现注册

  关键代码:
  以下代码注释都很清楚了,如有不懂的地方可以留言,这里就不多做解释了。

  [java] view plain copy print?
  /**
  * 注册
  *
  * @param account 注册帐号
  * @param password 注册密码
  * @return 1、注册成功 0、服务器没有返回结果2、这个账号已经存在3、注册失败
  */
  public String regist(String account, String password) {
  if (connection == null)
  return "0";
  Registration reg = new Registration();
  reg.setType(IQ.Type.SET);
  reg.setTo(ClientConServer.connection.getServiceName());
  reg.setUsername(account);// 注意这里createAccount注册时,参数是username,不是jid,是“@”前面的部分。
  reg.setPassword(password);
  reg.addAttribute("android", "geolo_createUser_android");// 这边addAttribute不能为空,否则出错。所以做个标志是android手机创建的吧!!!!!
  PacketFilter filter = new AndFilter(new PacketIDFilter(
  reg.getPacketID()), new PacketTypeFilter(IQ.class));
  PacketCollector collector = ClientConServer.connection
  .createPacketCollector(filter);
  ClientConServer.connection.sendPacket(reg);
  IQ result = (IQ) collector.nextResult(SmackConfiguration
  .getPacketReplyTimeout());
  // Stop queuing results
  collector.cancel();// 停止请求results(是否成功的结果)
  if (result == null) {
  Log.e("RegistActivity", "No response from server.");
  return "0";
  } else if (result.getType() == IQ.Type.RESULT) {
  return "1";
  } else { // if (result.getType() == IQ.Type.ERROR)
  if (result.getError().toString().equalsIgnoreCase("conflict(409)")) {
  Log.e("RegistActivity", "IQ.Type.ERROR: "
  + result.getError().toString());
  return "2";
  } else {
  Log.e("RegistActivity", "IQ.Type.ERROR: "
  + result.getError().toString());
  return "3";
  }
  }
  }

第三、实现登录

  关键代码: 代码很简单不做太多解释

  [java] view plain copy print?
  /**
  * 登录
  *
  * @param a 登录帐号
  * @param p 登录密码
  * @return
  */
  public boolean login(String a, String p) {
  try {
  if (connection == null)
  return false;
  /** 登录 */
  connection.login(a, p);
  return true;
  } catch (Exception e) {
  e.printStackTrace();
  }
  return false;
  }

第四、修改密码

  关键代码:同样很简单
  [java] view plain copy print?
  /**
  * 修改密码
  * @param connection
  * @return
  */
  public static boolean changePassword(XMPPConnection connection,String pwd)
  {
  try {
  connection.getAccountManager().changePassword(pwd);
  return true;
  } catch (Exception e) {
  return false;
  }
  }
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式