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が結果を返すまでフリーズします。問題は非同期プロセスであると仮定していますか?私が間違っていることを知っているすべての助けをたくさんありがとう
イベントまたはasync/awaitを使用して、UIスレッドをブロックしないようにしてください。 – mrousavy
私はAyncを追加して待っていますが、どこでProgressBarを使用しますか? – KMR