2017-09-26 81 views
0

Im使用Xamarin和C#構建一個android應用程序。 該應用程序使用restsharp連接到我的服務器並提取我需要的信息。Xamarin - 使用async/await和ProgressDialog

我試圖建立一個註冊頁面,我想檢查用戶是否存在。 我想在後臺執行此操作,而用戶看到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節目,但總比沒有happedns。 我試圖用其他方式做到這一點,但仍然在不斷努力。

這是幹什麼用的嗎? Thx

+0

提防異步的,因爲它創造了一個新的線程,並改變你需要在UI線程的對話框。 – rmjoia

+0

您是否嘗試過使用斷點來查看'api.CheckIfExist(PhoneNumber);'是否運行? –

+0

是的,thia方法運行並返回一個布爾值。問題是服務器返回結果後什麼也沒有發生 –

回答

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