我正在努力在Xamarin.Forms Android和iOS应用程序上实现具有同步领域的 Realm Platform 。使用下面的代码,我可以创建/连接到应该存储数据的领域实例,并且可以向实例添加新对象。但是,无论我做什么我都无法获得
realm.Find<Person>("ID-1");
返回任何内容。在try() catch()
中,该行返回:“对象引用未设置为对象的实例”。使用 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
答案 0 :(得分:1)
QueryBasedSyncConfiguration
是在我离开Realm Xamarin团队之后添加的,但是我认为它不起作用,因为您没有完全配置它。
从docs来看,很明显您必须设置订阅。
默认情况下,基于查询的同步领域不包含任何数据。相反,客户端应用程序必须选择或订阅要同步的服务器上相应领域中的数据子集。
您没有按照他们的描述创建订阅:
var subscription = realm.All<Person>().Where(e => e.Number > 100).Subscribe();
我非常确定,即使您是在本地创建数据,在您拥有包含该数据的订阅之前,它实际上也不存在于本地。