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

上一节中未提到怎么获取对象:

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参数都是一样的,看文章开头。好,差不多了,可以讲下一节了


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值