领域 Xamarin.Forms 找不到现有项目
Realm Xamarin.Forms can't find existing item
我正在努力在 Xamarin.Forms Android 和 iOS 应用程序上实现具有同步领域的 Realm 平台。使用下面的代码,我可以 create/connect 到应该存储数据的领域实例,我可以向实例添加新对象。但是,无论我做什么我都得不到
realm.Find<Person>("ID-1");
到return任何东西。在 try() catch()
那行 returns: "Object reference not set to instance of an object"。使用 Realm Studio 我可以看到所做的更改,并且我看到我在应用程序上寻找的对象存在。
此外,如果我尝试查询元素,无论我指定哪个参数,我总是得到 0。
型号:
public class Person : RealmObject
{
[PrimaryKey]
public string Id { get; set; }
public int Number {get; set;}
public string DeviceName { get; set; }
public string DeviceId { get; set; }
public IList<SoundSnapModel> SnapList { get;}
public Person()
{
}
}
代码片段:
var credentials = Credentials.Nickname("Thanos", false);
var InstanceId = "instance-name";
var serverURL = new Uri("realms://" + InstanceId + "/~/testRealm3");
var AUTH_URL = new Uri("https://" + InstanceId + "/auth");
var user = await User.LoginAsync(credentials, AUTH_URL);
var configuration = new QueryBasedSyncConfiguration(serverURL, user);
var realm = Realm.GetInstance(configuration);
realm.Write(() => realm.Add(new Person { Id = "ID-1", Number = 123,
DeviceId = "something", DeviceName = "something" })); // works without issue
Debug.WriteLine("Added new person!!");
var elements = realm.All<Person>().Where(e => e.Number > 100);
Debug.WriteLine("Found the object list: " + elements.Count() + " "); // returns 0
var currentObject = realm.Find<Person>("ID-1"); // triggers the exception mentioned above
QueryBasedSyncConfiguration
是在我离开 Realm Xamarin 团队后添加的,但我认为它不起作用,因为您没有完全配置它。
查看 docs 很明显您必须设置订阅。
默认情况下,基于查询的同步领域不包含任何数据。相反,客户端应用程序必须选择或订阅它要同步的服务器上相应领域中的哪个数据子集。
您没有按照他们的描述创建订阅:
var subscription = realm.All<Person>().Where(e => e.Number > 100).Subscribe();
我相当确定,即使您是在本地创建数据,但在您拥有包含它的订阅之前,它实际上并不存在于本地。
我正在努力在 Xamarin.Forms Android 和 iOS 应用程序上实现具有同步领域的 Realm 平台。使用下面的代码,我可以 create/connect 到应该存储数据的领域实例,我可以向实例添加新对象。但是,无论我做什么我都得不到
realm.Find<Person>("ID-1");
到return任何东西。在 try() catch()
那行 returns: "Object reference not set to instance of an object"。使用 Realm Studio 我可以看到所做的更改,并且我看到我在应用程序上寻找的对象存在。
此外,如果我尝试查询元素,无论我指定哪个参数,我总是得到 0。
型号:
public class Person : RealmObject
{
[PrimaryKey]
public string Id { get; set; }
public int Number {get; set;}
public string DeviceName { get; set; }
public string DeviceId { get; set; }
public IList<SoundSnapModel> SnapList { get;}
public Person()
{
}
}
代码片段:
var credentials = Credentials.Nickname("Thanos", false);
var InstanceId = "instance-name";
var serverURL = new Uri("realms://" + InstanceId + "/~/testRealm3");
var AUTH_URL = new Uri("https://" + InstanceId + "/auth");
var user = await User.LoginAsync(credentials, AUTH_URL);
var configuration = new QueryBasedSyncConfiguration(serverURL, user);
var realm = Realm.GetInstance(configuration);
realm.Write(() => realm.Add(new Person { Id = "ID-1", Number = 123,
DeviceId = "something", DeviceName = "something" })); // works without issue
Debug.WriteLine("Added new person!!");
var elements = realm.All<Person>().Where(e => e.Number > 100);
Debug.WriteLine("Found the object list: " + elements.Count() + " "); // returns 0
var currentObject = realm.Find<Person>("ID-1"); // triggers the exception mentioned above
QueryBasedSyncConfiguration
是在我离开 Realm Xamarin 团队后添加的,但我认为它不起作用,因为您没有完全配置它。
查看 docs 很明显您必须设置订阅。
默认情况下,基于查询的同步领域不包含任何数据。相反,客户端应用程序必须选择或订阅它要同步的服务器上相应领域中的哪个数据子集。
您没有按照他们的描述创建订阅:
var subscription = realm.All<Person>().Where(e => e.Number > 100).Subscribe();
我相当确定,即使您是在本地创建数据,但在您拥有包含它的订阅之前,它实际上并不存在于本地。