【发布时间】: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