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

关于基于android的smack–asmack中注册用户的问题

2011-05-24 21:25 316 查看
由于asmack中的createAccount存在一个不能让Attribute(用户描述)为空的问题。
如果Attribute没有设置或者为空,服务器会抛出500错误,或者服务器没有响应。
就算Attribute有设置,createAccount却没有一个服务器返回创建用户成功的信息。
所以,我复写了createAccount下的方法,并自定义了Attribute的值
在注册用户时候,服务器会返回以下信息:
1.   conflict(409):表示创建的用户名出现了冲突,换句话说就是服务器上已经存在了这个用户名了。
2.   RESULT: 服务器返回一个result,这个rusult是客服端发送出去的,服务器返回一样的结果,表示用户创建成功了
3.  500错误: 这个内容多了。说不清楚。下次描述细些
XMPPConnection connection = new XMPPConnection(new ConnectionConfiguration(“wys.0101.com.cn”));
ConnectionConfiguration(“wys.0101.com.cn”));
try {
connection.connect();
} catch (XMPPException e1) {
Toast.makeText(xmppMain.this, “网络连接失败”, Toast.LENGTH_SHORT).show();
e1.printStackTrace();
}
/*
AccountManager amgr = connection.getAccountManager();
try {
//注意这里createAccount注册时,参数是username,不是jid,是“@”前面的部分。
amgr.createAccount(“geolo4″, “364200″);
Toast.makeText(xmppMain.this, “注册成功”, Toast.LENGTH_LONG).show();
} catch (XMPPException e) {
Toast.makeText(xmppMain.this, “注册失败”, Toast.LENGTH_LONG).show();
Log.e(“xmppMainRegiter”, e.toString());
}*/
//不使用上面的createAccount来创建,这个方法有问题。所以,我复写了方法。
Registration reg = new Registration();
reg.setType(IQ.Type.SET);
reg.setTo(connection.getServiceName());
reg.setUsername(registerUserName.getText().toString());//注意这里createAccount注册时,参数是username,不是jid,是“@”前面的部分。
reg.setPassword(registerPassword.getText().toString());
reg.addAttribute(“android”, “geolo_createUser_android”);//这边addAttribute不能为空,否则出错。所以做个标志是android手机创建的吧!!!!!
PacketFilter filter = new AndFilter(new PacketIDFilter(reg.getPacketID()),
new PacketTypeFilter(IQ.class));
PacketCollector collector = connection.createPacketCollector(filter);
connection.sendPacket(reg);
IQ result = (IQ)collector.nextResult(SmackConfiguration.getPacketReplyTimeout());
// Stop queuing results
collector.cancel();//停止请求results(是否成功的结果)
if (result == null) {
Log.e(“xmppMainRegiter”, “No response from server.”);
Toast.makeText(xmppMain.this, “服务器没有返回结果”, Toast.LENGTH_SHORT).show();
}
else if (result.getType() == IQ.Type.ERROR) {
if(result.getError().toString().equalsIgnoreCase(“conflict(409)”)){
Log.e(“xmppMainRegiter”, “IQ.Type.ERROR: “+result.getError().toString());
Toast.makeText(xmppMain.this, “这个账号已经存在”, Toast.LENGTH_SHORT).show();
}else{
Log.e(“xmppMainRegiter”, “IQ.Type.ERROR: “+result.getError().toString());
Toast.makeText(xmppMain.this, “注册失败”, Toast.LENGTH_SHORT).show();
}
}else if(result.getType() == IQ.Type.RESULT){
setToText(R.id.userid, registerUserName.getText().toString());
setToText(R.id.password, registerPassword.getText().toString());
Toast.makeText(xmppMain.this, “恭喜你注册成功”, Toast.LENGTH_SHORT).show();
本文转自:http://geolo.co.cc/?p=27
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐