android - 在网络服务调用期间显示 'please wait'

标签 android multithreading web-services android-asynctask

我有一个通过 .net Web 服务检查用户名可用性的 Activity ,我需要在调用期间显示“请稍候”消息,因为它可能需要一两秒钟 - 我已经尝试过 AsyncTask 和 Threading,但问题是我实际上,我想阻塞主(也是唯一)线程,直到 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”函数:

公共(public) bool 用户名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 服务内容

谢谢 迈克

最佳答案

您可以按以下方式构建代码:

private class MyBackgroundTask extends AsyncTask<Void, Void, Void> {
    protected void onPreExecute() {
        // show dialog
    }
    protected Void doInBackground(Void... unused) {
        // background processing
    }
    protected void onPostExecute(Void unused) {
        // dismiss dialog
        continueProcessing();
    }
}

private OnClickListener RegistrationListener = new OnClickListener() {
    public void onClick(View v) {
        // non-blocking code

        new MyBackgroundTask().execute();
    }
}

public void continueProcessing() {
    // the rest of the main activity
}

关于android - 在网络服务调用期间显示 'please wait',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7109760/

相关文章:

Android NDK 安装问题

python - 如何使用Python使用不同的输入异步调用API一百万次

c - Pthread_join() 卡在线程数组上

c# - 如何检索向 C# Web 服务发出请求的客户端的 IP

web-services - 使用 oauth 作为 session ID 的 Salesforce 报告访问

android - 使用可绘制对象构建 IntelliJ Android 缓存忽略更改

android - 在 Android 上调试时 RxJava 缓存线程中的 InterruptedException

java - ExecutorCompletionService 最多等待 n 秒完成

java - JAX-WS 客户端获取响应 header

android - 为什么 notifyItemChanged 不起作用