【发布时间】:2011-08-18 15:12:07
【问题描述】:
我有一个通过 .net Web 服务检查用户名可用性的活动,我需要在通话期间显示“请稍候”消息,因为它可能需要一两秒钟 - 我已经尝试过 AsyncTask 和线程,但问题是我有是我实际上想阻塞主(也是唯一的)线程,直到 Web 服务调用完成,因为我依赖于它的结果来处理其他逻辑。
我已经尝试了各种方法,但没有任何乐趣 - 有人可以帮忙吗?
根据要求,这是我的一段代码:
private OnClickListener RegistrationListener = new OnClickListener() {
public void onClick(View v) {
ClearFieldHighlighting();
if (ValidateData()) {
if (IsOnline()) {
if (UsernameIsAvailable()) {
try {
iNETUserID = CreateOnlineUser();
} catch (Exception e) {
}
..更多代码.. }
这里是“UsernameIsAvailable”函数:
公共布尔用户名IsAvailable() {
Boolean bUsernameIsAvailable = false;
SoapObject request = new SoapObject(TA.sNAMESPACE,
TA.METHOD_IsUsernameAvailable);
request.addProperty("sUsername", sEmail);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setOutputSoapObject(request);
HttpTransportSE androidHttpTransport = new HttpTransportSE(
TA.WEBSERVICES_URL);
try {
androidHttpTransport.call(TA.SOAP_ACTION_IsUsernameAvailable,
envelope);
SoapObject thisresponse = (SoapObject) envelope.bodyIn;
for (int i = 0; i < thisresponse.getPropertyCount(); i++) {
Object obj = thisresponse.getProperty(i);
SoapPrimitive soapPrimitive = (SoapPrimitive) obj;
bUsernameIsAvailable = Boolean.parseBoolean(soapPrimitive
.toString());
}
} catch (Exception e) {
}
return bUsernameIsAvailable;
}
我正在使用 KSoap2,它是一个外部 jar 文件来处理 Web 服务内容
谢谢 迈克
【问题讨论】:
-
谢谢,我明白我不应该阻止 UI 线程,我只需要!这是我的代码的一部分: private OnClickListener RegistrationListener = new OnClickListener() { public void onClick(View v) { ClearFieldHighlighting(); if (ValidateData()) { if (IsOnline()) { if (UsernameIsAvailable()) { try { iNETUserID = CreateOnlineUser(); } catch (Exception e) { } 是对 UsernameIsAvailable 的调用导致了问题,因为它返回了一个我需要继续的 bool 结果!
标签: android multithreading web-services android-asynctask