【发布时间】:2011-11-21 15:00:16
【问题描述】:
我已经经历了this1、this2和this3,但仍然找不到问题的解决方案。
我可以知道我在这段代码中的问题出在哪里:
- 从文本框中获取输入并
- 传递该值以检查文本框中提供的用户名是否存在
- 每当我单击检查按钮时,仅显示“调用的函数”并且不执行搜索。
这是我到目前为止所做的代码。
public class Registration extends Activity implements OnClickListener {
private final static String SERVER_HOST = "10.0.2.2";
private final static int SERVER_PORT = 5222;
private static final String TAG = null;
private ProviderManager pm;
private EditText username;
private Button btn;
private XMPPConnection connection;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.registration);
try {
initConnection();
} catch (XMPPException e) {
e.printStackTrace();
}
username = (EditText) this.findViewById(R.id.txtregusername);
btn=(Button) this.findViewById(R.id.btncheck);
btn.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch(v.getId())
{
case R.id.btncheck:
try {
check();
} catch (XMPPException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
break;
}
}
private void check() throws XMPPException{
Toast.makeText(this,"Function called",Toast.LENGTH_SHORT).show();
pm.addIQProvider("query","jabber:iq:search", new UserSearch.Provider());
UserSearchManager search = new UserSearchManager(connection);
Form searchForm = search.getSearchForm("search."+connection.getServiceName());
Form answerForm = searchForm.createAnswerForm();
answerForm.setAnswer("Username", true);
Toast.makeText(this,username.getText().toString(),Toast.LENGTH_SHORT).show();
answerForm.setAnswer("search", username.getText().toString());
ReportedData data = search.getSearchResults(answerForm,"search."+connection.getServiceName());
if(data.getRows() != null)
{
Toast.makeText(this,"Username Exists",Toast.LENGTH_SHORT).show();
}
else
{
Toast.makeText(this,"Username Available",Toast.LENGTH_SHORT).show();
}
}
private void initConnection() throws XMPPException{
ConnectionConfiguration config=new ConnectionConfiguration(SERVER_HOST,SERVER_PORT);
config.setSecurityMode(SecurityMode.enabled);
config.setSASLAuthenticationEnabled(true);
connection=new XMPPConnection(config);
try {
connection.connect();
}
catch (XMPPException e) {
Log.e(TAG, "Error connection to XMPP Server");
e.printStackTrace();
}
}
}
【问题讨论】:
-
这是什么问题?! :) 你能发布异常日志,或者描述问题吗?
-
正如我在 3 中也提到的,问题是没有执行搜索我不知道问题出在哪里。自从 5 小时以来我一直在尝试这个以找到错误。
-
如果用户已经存在,你为什么不只是依赖 createUser(无论被调用的)函数会抛出异常,而不是你捕获异常。为什么需要显式检查用户是否已经存在?
-
@hovanessyan: 我很欣赏你的建议..但如果我错了我很抱歉我已经尝试过这个 try{ AccountManager manager = conn.getAccountManager(); manager.createAccount(usename,password);} catch(...) 但可以得到任何结果所以..你能显示这个细节吗
-
您是否检查过是否建立了与服务器的连接?您可以向服务器查询某些内容并返回结果吗?也许您可以尝试使用现有用户登录并断开与服务器的连接,并监控 xmpp 的日志(是否是 Openfire)以查看通信是否正常?