Xamarin - 使用async / await和ProgressDialog

时间:2017-09-26 13:06:45

标签: c# android asynchronous xamarin

我正在使用Xamarin和C#构建一个Android应用程序。 该应用程序使用restsharp连接到我的服务器并提取我需要的信息。

我正在尝试构建一个注册页面,我想检查用户是否存在。 我希望在用户看到ProgressDialog时在后台执行此操作。

这是我的代码:

            if (!string.IsNullOrEmpty(PhoneNumber) && !string.IsNullOrEmpty(Password)
            && !string.IsNullOrEmpty(LicenceId) && LicenceImage.Length > 1)
        {
            ProgressDialog mDialog = new ProgressDialog(this);
            mDialog.SetMessage("Loading data...");
            mDialog.SetCancelable(false);
            mDialog.Show();

            bool checkExistance = await api.CheckIfExist(PhoneNumber);

            if (checkExistance)
            {
                Android.Support.V7.App.AlertDialog.Builder alert = new Android.Support.V7.App.AlertDialog.Builder(this);
                alert.SetTitle("");
            }
            else
            {
                Intent intent = new Intent(this, typeof(RegisterDone));

                StartActivity(intent);
            }

        }

ProgressDialog显示但没有发生任何事情。 我试图以其他方式做到这一点,但仍然很有效。

有什么方法可以做到这一点? Thx提前

1 个答案:

答案 0 :(得分:0)

  

我想检查用户是否存在。当用户看到ProgressDialog

时,我想在后台执行此操作

在Android中,您可以使用Handler来实现此功能。当您显示ProgressDialog时,您可以使用Handler打开一个新线程来执行验证。获得结果后,向Handler中的Handler发送消息,您可以获得结果并执行逻辑。这是一个例子:

显示ProgressDialog并使用Handler打开新主题执行验证:

mDialog = new ProgressDialog(this);
mDialog.SetMessage("Loading data...");
mDialog.SetCancelable(false);
mDialog.Show();

Action action = () =>
{
     checkExistance();
};

handler = new MyHandler(this);
handler.Post(action);

检查用户是否存在并返回值,向MyHandler发送消息:

private async void checkExistance()
{
    bool checkExistance = api.CheckIfExist(PhoneNumber);

    Message msg = new Message();
    msg = handler.ObtainMessage();

    if (checkExistance)
    {
        msg.Arg1 = 0;//tell MyHandler exist
    }
    else
    {
        msg.Arg1 = 1;//tell MyHandler didnt exist
    }   
    handler.SendMessage(msg);
}

处理MyHandler中的消息:

public class MyHandler : Handler
{
    private MainActivity mainActivity;

    public MyHandler(MainActivity mainActivity)
    {
        this.mainActivity = mainActivity;
    }

    public override void HandleMessage(Message msg)
    {
        switch (msg.Arg1)
        {
            case 0:
                //true
                mainActivity.Exist();
                mainActivity.mDialog.Dismiss();
                break;
            case 1:
                //false
                mainActivity.Regist();
                mainActivity.mDialog.Dismiss();
                break;
            default:
                break;
        }
        base.HandleMessage(msg);
    }
}

Exist()方法和Regist()中的MainActivity

 public void Exist()
 {
     Android.Support.V7.App.AlertDialog.Builder alert = new Android.Support.V7.App.AlertDialog.Builder(this);
     alert.SetTitle("");
 }

 public void Regist()
 {
     Intent intent = new Intent(this, typeof(RegisterDone));
     StartActivity(intent);
 }

效果:

enter image description here