2017-05-02 36 views
0

私はXamarin AndroidとC#の初心者ですが、APIが結果を返す間にプログレスバー(サークルローディング)を追加したいと思います。APIが結果を返す間に進行状況バー(円をロードする)を追加するにはどうすればよいですか?

これはどのように

<RelativeLayout 
      android:layout_width="match_parent" 
      android:layout_height="51.0dp" 
      android:minWidth="25px" 
      android:minHeight="25px"> 
      <ProgressBar xmlns:tools="http://schemas.android.com/tools" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:id="@+id/progressBarRaiseJob" 
       android:layout_centerInParent="true" /> 
     </RelativeLayout> 

私は.axmlでこれを持って、私はボタンのクリックイベントに、次のAPIを持って

btnSubmit.Click += async (sender, e) => 
     { 
      var jobId = txtJobID.Text; 

      if (txtJobID.Text.Length <= 0) 
      { 
       txtJobID.RequestFocus(); 
       txtJobID.SetError("Job ID required", iconError); 
      } 
      else 
      { 
       var request = HttpWebRequest.Create(string.Format("http://192.168.79.174:90/api/test/" + jobId)); 
       request.ContentType = "application/json"; 
       request.Method = "GET"; 

       mProgressBar.Visibility = ViewStates.Visible; 


       using (HttpWebResponse response = await request.GetResponseAsync() as HttpWebResponse) 
       { 

        if (response.StatusCode != HttpStatusCode.OK) 
         Console.Out.WriteLine("Error fetching data. Server returned status code: {0}", response.StatusCode); 

        using (StreamReader reader = new StreamReader(response.GetResponseStream())) 
        { 
         var content = reader.ReadToEnd(); 

         dynamic arr = JsonConvert.DeserializeObject(content); 

         foreach (dynamic obj in arr) 
         { 
          tvJobID.Text = obj.JobID; 
          tvJobType.Text = obj.JobType; 
          tvDueDate.Text = obj.DueDate; 
          tvVisitTime.Text = obj.Time; 
          tvVisitStatus.Text = obj.VisitStatus; 
          tvAddress1.Text = obj.Address1; 
          tvAddress2.Text = obj.Address2; 
          tvPostCode.Text = obj.PostCode; 
          tvAuthority.Text = obj.Authority; 
         } 

         if (content == null || content == "" || content == "[]") 
         { 

          //Console.Out.WriteLine("Response contained empty body..."); 
          layoutController.Visibility = ViewStates.Invisible; 
          Toast.MakeText(ApplicationContext, "Invalid Job ID or no visits for this ID. Please try again", ToastLength.Long).Show(); 
         } 
         else 
         { 
          layoutController.Visibility = ViewStates.Visible; 


         } 
        } 
       } 
      } 

     }; 

私のプログレスバー、

ProgressBar mProgressBar = FindViewById<ProgressBar>(Resource.Id.progressBarConfirmJob); 

mProgressBar.Visibility = ViewStates.Visible; 

ができていますWeb APIが結果を返すまで進捗バーを表示します。現時点では、Progressバーが2秒間表示され、APIが結果を返すまでフリーズします。問題は非同期プロセスであると仮定していますか?私が間違っていることを知っているすべての助けをたくさんありがとう

+0

イベントまたはasync/awaitを使用して、UIスレッドをブロックしないようにしてください。 – mrousavy

+0

私はAyncを追加して待っていますが、どこでProgressBarを使用しますか? – KMR

答えて

0

非同期タスクでは、事前実行メソッドでは進行状況バーを表示し、実行後メソッドでは進行状況バーを削除します。表示オプションを使用してバーを削除します。

関連する問題