您的位置:首页 > 移动开发 > Android开发

XMPP的android下的登陆,注册等:

2015-08-22 20:44 381 查看
上一节中未提到怎么获取对象:

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参数都是一样的,看文章开头。好,差不多了,可以讲下一节了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: