[英]Xamarin Android async await not await method
我正在做一個 Xamarin Android 項目,我不想將我的 SQLite 數據庫中的對象列表顯示到 RecyclerView 中。
RecyclerView 位於 Fragment 中。 我不想在打開這個片段時顯示列表,當我從一個活動返回到這個片段時,我不想刷新回收者視圖的數據。
知道我得到了正確的值,但我不知道為什么不等待GetMyObjectsAsync
結果 為什么?
using System.Collections.Generic;
using System.Threading.Tasks;
using Android.OS;
using Android.Support.V7.Widget;
using Android.Views;
using Microsoft.Practices.ServiceLocation;
using System.Linq;
using Android.App;
using Android.Widget;
using Android.Util;
using System;
namespace POCProject.Droid.Fragments
{
public class MyCustomFragment : Fragment
{
private IMyObjectsService _myObjectsService;
List<ObjModel> myObjects { get; set; } = new List<ObjModel>();
RecyclerView mRecyclerView;
RecyclerView.LayoutManager mLayoutManager;
MyObjectsRecyclerViewAdapter mAdapter;
public override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
_myObjectsService = ServiceLocator.Current.GetInstance<IMyObjectsService>();
}
public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
View view = inflater.Inflate(Resource.Layout.fragment_my_objects_list, container, false) as View;
mRecyclerView = view.FindViewById<RecyclerView>(Resource.Id.MyRecyclerView);
mLayoutManager = new LinearLayoutManager(mRecyclerView.Context);
mRecyclerView.SetLayoutManager(mLayoutManager);
return view;
}
public override void OnResume()
{
base.OnResume();
Task.Run(async () => {
try
{
myObjects = await GetMyObjectsAsync(); // Here it's not awaited the result why ?
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
});
mAdapter = new MyObjectsRecyclerViewAdapter(myObjects);
Console.WriteLine("--------------------OnResume Called-------------------- " + myObjects.Count()); // Always 0 why ?
mRecyclerView.SetAdapter(mAdapter);
}
private async Task<List<ObjModel>> GetMyObjectsAsync(){
Console.WriteLine("--------------------GetMyObjectsAsync Called--------------------");
var result = await _myObjectsService.GetAllAsync(); // Get objects in sqlite databases
Console.WriteLine("-------------------- result" + result.Value.Count() + "--------------------"); // Return the correct value for example 5
List<ObjModel> myOjectsTmp = new List<ObjModel>();
if (!result.HasErrors && result.HasValue)
{
foreach (var obj in result.Value)
{
myOjectsTmp.Add(obj);
}
Console.WriteLine("-------------------- myOjectsTmp"+ myOjectsTmp.Count() + "--------------------"); // Return the correct value for example 5
}
return myOjectsTmp;
}
}
}
嘗試這個:
移動這兩行:
mAdapter = new MyObjectsRecyclerViewAdapter(myObjects);
mRecyclerView.SetAdapter(mAdapter);
后
myObjects = await GetMyObjectsAsync();
喜歡:
myObjects = await GetMyObjectsAsync();
Activity.RunOnUiThread(() =>
{
mAdapter = new MyObjectsRecyclerViewAdapter(myObjects);
mRecyclerView.SetAdapter(mAdapter);
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.