فرض کنیم در یک Activity میخواهیم یک لیست ویو را با داده از راه دور پر کنیم . میخواهیم در هنگام واکشی اطلاعات پروگرس دیالوگ را نشان دهیم . چطور میتوانیم؟
از متد زیر در onCreate یک Activity استفاده کرده ام ولی باز هم کار نمیکند اشکال در کجاست؟
private async void BindListView()
{
using (ProgressDialog progress = new ProgressDialog(this))
{
progress.SetMessage("");
progress.SetTitle("");
progress.Show();
var ti = new TokenInfo
{
token = TokenValue.TokenFromDevice
};
_foodCategory = _foodRepo.GetAllFoodCategory(ti).Result;
_lstFoodCategory.Adapter = new FoodCategoryAdapter(this, _foodCategory);
progress.Dismiss();
}
}
از طریق کلید کد در ادیتور کدهاتون رو قرار بدید
public async Task<List<FoodCategoryInfo>> GetAllFoodCategory(TokenInfo info) { try { using (var client = new HttpClient()) { var uri = new Uri(baseUri + "Food_Category/PostFoodCategoriesByToken"); var json = JsonConvert.SerializeObject(info); var content = new StringContent(json, Encoding.UTF8, "application/json"); var response = await client.PostAsync(uri, content).ConfigureAwait(false); if (response.IsSuccessStatusCode) { var responseContent = await response.Content.ReadAsStringAsync(); var authData = JsonConvert.DeserializeObject<List<FoodCategoryInfo>>(responseContent); return authData; } } } catch (TimeoutException) { } return null; } private async void BindListView() { using (ProgressDialog progress = new ProgressDialog(this)) { progress.SetMessage(""); progress.SetTitle(""); progress.Show(); await Task.Run(() => { var ti = new TokenInfo { token = TokenValue.TokenFromDevice }; _foodCategory = _foodRepo.GetAllFoodCategory(ti).Result; _lstFoodCategory.Adapter = new FoodCategoryAdapter(this, _foodCategory); }); progress.Dismiss(); } }
شما باید سرویس رو به صورت async فراخوانی کنید
الان متد های خودتون رو async کردید
در سایت زامارین نمونه هست یه نگاه بندازید
متد اول متد خواندن از سرویس webapi است که بصورت sync در repository تعریف شده است
متد دوم متدی است که در activity تعریف شده و در oncreate جایگذاری شده است ولی متاسفانه کار نمیکند
progress را بیرون متد show کنید و بعد متد را فراخوانی کنید
در خود oncreate
هیچ کاربری تا کنون از این پست تشکر نکرده است
با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)