dot42 - 使用 dot42 的异步 SQLite 示例?

标签 dot42

我一直在测试 dot42,到目前为止效果很好,但我发现没有任何 SQLite 示例。我不确定是否应该实现 ContentProvider(正如一些 Android 文章所建议的那样),或者是否可以使用 dot42 的异步/等待实现来异步执行查询并在 ListView 上显示结果。

有什么建议吗?

提前致谢

罗伊加

最佳答案

以下代码示例使用 dot42 的 async/await 实现从 SQLite 数据库异步检索联系人。我省略了 SQLite 代码。 ContactsDatabase 继承自 SQLiteOpenHelper 并实现了常用方法。

using System;
using System.Threading;
using System.Threading.Tasks;
using System.Collections.Generic;

using Android.App;
using Android.Os;
using Android.Widget;

using Dot42;
using Dot42.Manifest;

[assembly: Application("SQLiteAsyncSample")]

namespace SQLiteAsyncSample
{
   [Activity]
   public class MainActivity : Activity
   {
      private ArrayAdapter<string> adapter;
      ContactsDatabase database;
      int i = 0;

      protected override void OnCreate(Bundle savedInstance)
      {
         base.OnCreate(savedInstance);
         SetContentView(R.Layouts.MainLayout);

         ListView list = FindViewById<ListView>(R.Ids.list);
         adapter = new ArrayAdapter<string>(this, Android.R.Layout.Simple_list_item_1);
         list.SetAdapter(adapter);

         database = new ContactsDatabase(this);

         database.AddContact(new Contact("Frank", "012"));
         database.AddContact(new Contact("Marco", "345"));
         database.AddContact(new Contact("Hans", "678"));
         database.AddContact(new Contact("Sergey", "901"));

         Button addAllButton = FindViewById<Button>(R.Ids.showall);
         addAllButton.Click += showAllButton_Click;

         // Set the static synchronization context to the current/latest 'this'.
         // This allows the code after the wait to resume on the 'current' this
         // even if the Activity was recycled, e.g. due to a device rotation.
         SynchronizationContext.SetSynchronizationContext(this);
      }

      private async void showAllButton_Click(object sender, EventArgs e)
      {
         List<Contact> contacts = null;
         await Task.Factory.StartNew( () => {
            // lengthy job
            contacts = database.GetAllContacts();
         }).ConfigureAwait(this);

         // make sure to access the adapter from the UI thread
         // so not in the anonymous delegate above
         foreach (Contact contact in contacts) {
            adapter.Add(contact.Name);
         }
      }
   }
}

关于dot42 - 使用 dot42 的异步 SQLite 示例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19867847/

相关文章:

android - 点 42 - 导航到资源文件夹中的 HTML

android - dot42:为原始资源(mp3 文件)调用 SoundPool.Load 方法时抛出异常

c# - 无法将 enum 转换为 int dot42

android - 如何在 Visual Studio 中使用 dot42 创建类?

c# - 使用 dot42 触发事件

c# - 为什么 dot42 C# android 中缺少 "using Net.Sockets "?

c# - 是否有等同于 System.Net.Sockets.UdpClient 的 dot42?