我正在使用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提前
答案 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);
}
效果: