这是我第一次尝试使用Realm的Xamarin工作室(为iOS和Android制作应用程序),自从过去24小时后我就陷入了这种情况。
我的在线数据库表有30,000行。早些时候我曾经在Android工作室工作过,我曾经在应用程序的第一次运行中使用JSON,GSON导入这些行并插入到SQLite数据库中。
但我无法在Realm& Xamarin。我知道,我没有提供任何代码片段(我的努力),但老实说即使经过大量搜索后,我也找不到如何处理?
答案 0 :(得分:2)
我已经在Github issue中回答了这个问题,但是如果其他人偶然发现它,那么在不阻止UI线程的情况下执行此操作的最佳方法是使用Realm.WriteAsync
API。基本上,你会做类似的事情:
var items = await service.GetAllItems();
// I assume items are already deserialized RealmObject-s
var realm = Realm.GetInstance();
await realm.WriteAsync(r =>
{
foreach (var item in items)
{
r.Manage(item);
}
}
/* Data is loaded, show message or process it in other ways */
需要注意的一点是,在WriteAsync
lambda中,我们使用的是r
个实例,而不是原始的realm
个实例。原因是因为领域不是线程安全的,异步写入将在另一个线程上发生,所以它隐式地创建另一个实例并将其作为action参数的参数传递。