Ich bin ein Neuling zu Xamarin Android und C#, ich möchte einen Fortschrittsbalken (Ladekreis) hinzufügen, während die API die Ergebnisse zurückgibt.Wie füge ich einen Fortschrittsbalken (Ladekreis) hinzu, während die API die Ergebnisse zurückgibt?
Das ist mein Progress Bar,
ProgressBar mProgressBar = FindViewById<ProgressBar>(Resource.Id.progressBarConfirmJob);
mProgressBar.Visibility = ViewStates.Visible;
Ich habe die folgende API auf die Schaltfläche Click-Ereignis,
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;
}
}
}
}
};
Ich habe dies in der .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>
Wie kann Ich zeige den Fortschrittsbalken an, bis die Web-API Ergebnisse zurückgibt. Im Moment erscheint Progress Balken für 2 Sekunden und dann eingefroren, bis die API Ergebnisse zurückgibt, nehme ich an, dass das Problem mit dem asynchronen Prozess ist? Jede Idee, wo ich falsch liege, Vielen Dank für die ganze Hilfe
Versuchen Sie, Ereignisse oder async/await zu verwenden, damit Sie den UI-Thread nicht blockieren. – mrousavy
Ich habe das Aync hinzugefügt und warte ab, aber wo soll ich die ProgressBar verwenden? – KMR