2017-05-02 2 views
0

저는 Xamarin Android와 C#에 초보자입니다. API가 결과를 반환하는 동안 진행 바 (원을 로딩)를 추가하고 싶습니다. 이건 내 진행률 표시 줄입니다API가 결과를 반환하는 동안 진행률 표시 줄 (원로드)을 추가하는 방법은 무엇입니까?

,

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

mProgressBar.Visibility = ViewStates.Visible; 

나는 내가 .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; 


         } 
        } 
       } 
      } 

     }; 

을 가지고있다

<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> 

어떻게 웹 API가 결과를 반환 할 때까지 진행률 표시 줄을 표시합니다. 현재 진행률 막대가 2 초 동안 표시된 다음 API가 결과를 반환 할 때까지 멈추고 문제는 비동기 프로세스에 있다고 가정합니다. 내가 잘못 가고있는 어떤 생각, 모든 도움을 많이 주셔서 감사합니다

+0

UI 스레드를 차단하지 않도록 이벤트 또는 async/await를 사용해보십시오. – mrousavy

+0

Aync를 추가하고 기다리고 있지만 어디에서 ProgressBar를 사용해야합니까? – KMR

답변

0

비동기 작업에서 사전 실행 방법은 진행률 막대를 표시하고 실행 후 방법은 진행률 막대를 제거합니다. 가시성 옵션을 사용하여 막대를 제거하십시오.

관련 문제