【问题标题】:How to add a progress bar(loading circle) while the API returns the results?API返回结果时如何添加进度条(加载圈)?
【发布时间】:2017-05-02 11:07:53
【问题描述】:

我是 Xamarin Android 和 C# 的新手,我想在 API 返回结果时添加进度条(加载圈)。

这是我的进度条,

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

 mProgressBar.Visibility = ViewStates.Visible;

我在按钮点击事件上有以下 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;


                        }
                    }
                }
            }

        };

我在 .axml 中有这个

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

如何在 Web API 返回结果之前显示进度条。目前,进度条出现 2 秒,然后冻结,直到 API 返回结果,我假设问题出在异步进程上?知道我哪里出错了,非常感谢所有帮助

【问题讨论】:

  • 尝试使用事件或异步/等待,这样你就不会阻塞 UI 线程。
  • 我添加了 Aync 并等待,但我应该在哪里使用 ProgressBar?

标签: c# android asynchronous xamarin.android progress-bar


【解决方案1】:

在异步任务中,在 pre execute 方法中显示进度条,在 post execute 方法中删除进度条。使用可见性选项来移除栏。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-26
    • 2018-12-25
    • 1970-01-01
    • 1970-01-01
    • 2012-02-13
    相关资源
    最近更新 更多