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

  1. 由于asmack中的createAccount存在一个不能让Attribute(用户描述)为空的问题。  
  2. 如果Attribute没有设置或者为空,服务器会抛出500错误,或者服务器没有响应。  
  3. 就算Attribute有设置,createAccount却没有一个服务器返回创建用户成功的信息。  
  4. 所以,我复写了createAccount下的方法,并自定义了Attribute的值  
  5. 在注册用户时候,服务器会返回以下信息:  
  6. 1.   conflict(409):表示创建的用户名出现了冲突,换句话说就是服务器上已经存在了这个用户名了。  
  7. 2.   RESULT: 服务器返回一个result,这个rusult是客服端发送出去的,服务器返回一样的结果,表示用户创建成功了  
  8. 3.  500错误: 这个内容多了。说不清楚。下次描述细些  
  9. XMPPConnection connection = new XMPPConnection(new ConnectionConfiguration(“wys.0101.com.cn”));  
  10. ConnectionConfiguration(“wys.0101.com.cn”));  
  11. try {  
  12. connection.connect();  
  13. catch (XMPPException e1) {  
  14. Toast.makeText(xmppMain.this, “网络连接失败”, Toast.LENGTH_SHORT).show();  
  15. e1.printStackTrace();  
  16. }  
  17. /* 
  18. AccountManager amgr = connection.getAccountManager(); 
  19. try { 
  20. //注意这里createAccount注册时,参数是username,不是jid,是“@”前面的部分。 
  21. amgr.createAccount(“geolo4″, “364200″); 
  22. Toast.makeText(xmppMain.this, “注册成功”, Toast.LENGTH_LONG).show(); 
  23. } catch (XMPPException e) { 
  24. Toast.makeText(xmppMain.this, “注册失败”, Toast.LENGTH_LONG).show(); 
  25. Log.e(“xmppMainRegiter”, e.toString()); 
  26. }*/  
  27. //不使用上面的createAccount来创建,这个方法有问题。所以,我复写了方法。  
  28. Registration reg = new Registration();  
  29. reg.setType(IQ.Type.SET);  
  30. reg.setTo(connection.getServiceName());  
  31. reg.setUsername(registerUserName.getText().toString());//注意这里createAccount注册时,参数是username,不是jid,是“@”前面的部分。  
  32. reg.setPassword(registerPassword.getText().toString());  
  33. reg.addAttribute(“android”, “geolo_createUser_android”);//这边addAttribute不能为空,否则出错。所以做个标志是android手机创建的吧!!!!!  
  34. PacketFilter filter = new AndFilter(new PacketIDFilter(reg.getPacketID()),  
  35. new PacketTypeFilter(IQ.class));  
  36. PacketCollector collector = connection.createPacketCollector(filter);  
  37. connection.sendPacket(reg);  
  38. IQ result = (IQ)collector.nextResult(SmackConfiguration.getPacketReplyTimeout());  
  39. // Stop queuing results  
  40. collector.cancel();//停止请求results(是否成功的结果)  
  41. if (result == null) {  
  42. Log.e(“xmppMainRegiter”, “No response from server.”);  
  43. Toast.makeText(xmppMain.this, “服务器没有返回结果”, Toast.LENGTH_SHORT).show();  
  44. }  
  45. else if (result.getType() == IQ.Type.ERROR) {  
  46. if(result.getError().toString().equalsIgnoreCase(“conflict(409)”)){  
  47. Log.e(“xmppMainRegiter”, “IQ.Type.ERROR: “+result.getError().toString());  
  48. Toast.makeText(xmppMain.this, “这个账号已经存在”, Toast.LENGTH_SHORT).show();  
  49. }else{  
  50. Log.e(“xmppMainRegiter”, “IQ.Type.ERROR: “+result.getError().toString());  
  51. Toast.makeText(xmppMain.this, “注册失败”, Toast.LENGTH_SHORT).show();  
  52. }  
  53. }else if(result.getType() == IQ.Type.RESULT){  
  54. setToText(R.id.userid, registerUserName.getText().toString());  
  55. setToText(R.id.password, registerPassword.getText().toString());  
  56. Toast.makeText(xmppMain.this, “恭喜你注册成功”, Toast.LENGTH_SHORT).show();  
  57. 本文转自:http://geolo.co.cc/?p=27
posted @ 2013-01-21 14:01  Lost in code  阅读(649)  评论(1编辑  收藏  举报