ToListAsync()

时间:2016-07-27 10:12:20

标签: android xamarin.android android-recyclerview sqlite-net

Hy,我想在我的Xamarin.Android应用程序中使用我的RecyclerView显示SQLite.net查询的结果。在执行查询同步时,everythin工作正常。但是当我将它异常时,Recyclerview不会出现。我检查了查询的结果,它包含所有预期的条目。 这有效:

songsEntryArray = MusicShareDatabase.Instance.Database.Table<SongsEntry>().ToArray();

mRecyclerView = rootView.FindViewById<RecyclerView>(Resource.Id.allsongs_recyclerview);
mLayoutManager = new LinearLayoutManager(this.Activity);
mRecyclerView.SetLayoutManager(mLayoutManager);
mAdapter = new AllSongsAdapter(songsEntryArray);
mAdapter.ItemClick += OnItemClick;
mRecyclerView.SetAdapter(mAdapter);
mAdapter.NotifyDataSetChanged();

这不起作用:

var query = MusicShareDatabase.Instance.DatabaseAsync.Table<SongsEntry>();

query.ToListAsync().ContinueWith(t =>
{
   mRecyclerView = rootView.FindViewById<RecyclerView>(Resource.Id.allsongs_recyclerview);
   mLayoutManager = new LinearLayoutManager(this.Activity);
   mRecyclerView.SetLayoutManager(mLayoutManager);
   mAdapter = new AllSongsAdapter(t.Result.ToArray());
   mAdapter.ItemClick += OnItemClick;
   mRecyclerView.SetAdapter(mAdapter);
   mAdapter.NotifyDataSetChanged();
});

1 个答案:

答案 0 :(得分:1)

我认为ContinueWith(Action action)正在后台线程上运行。

您需要使用方法UIThreadActivity.RunOnUiThread(Action action);上运行此代码。

<强>代码

query.ToListAsync().ContinueWith(t =>
{
   Activity.RunOnUiThread(() => {
       mRecyclerView = rootView.FindViewById<RecyclerView>(Resource.Id.allsongs_recyclerview);
       mLayoutManager = new LinearLayoutManager(this.Activity);
       mRecyclerView.SetLayoutManager(mLayoutManager);
       mAdapter = new AllSongsAdapter(t.Result.ToArray());
       mAdapter.ItemClick += OnItemClick;
       mRecyclerView.SetAdapter(mAdapter);
       mAdapter.NotifyDataSetChanged();
    });
});