【发布时间】:2017-08-29 17:58:53
【问题描述】:
我在 Google Cloud Compute ubuntu vm 上启动了一个新的 ROS,并尝试通过 Xamarin.Android 项目编写对象:
public class TestObject : RealmObject
{
public string TestString { get; set; }
public int TestInt { get; set; }
}
//new non-existent realm, I also tried a public realm -> realm://###.###.###.###/newrealm
var realmUrl = "realm://###.###.###.###/~/newrealm";
//preconfigured admin credentials
var creds = Credentials.UsernamePassword("admin@gmail.com", "password", false);
var user = await User.LoginAsync(creds, new Uri("http://###.###.###.###:9080"));
var config = new SyncConfiguration(user, new Uri(realmUrl));
var realm = Realm.GetInstance(config);
//this event never fires
Session.Error += (sender, errorArgs) => { var ex = errorArgs.Exception; };
//left this in just to be sure there were no permissions issues
await user.ApplyPermissionsAsync(PermissionCondition.Default, realmUrl, AccessLevel.Write);
//this will contain objects on subsequent runs
var existing = realm.All<TestObject>().ToList();
//also tried realm.Write(() => { });
using (var trans = realm.BeginWrite())
{
var test = new TestObject();
test.TestString = "test";
test.TestInt = 99;
realm.Add(test);
trans.Commit();
};
结果是在远程 ROS 上成功创建了新领域,但根据仪表板和领域浏览器,即使多次运行此代码,它仍然是空的。您会在我的评论中注意到本地领域确实包含书面对象,而不是远程对象。执行此代码时,服务器日志显示大量消息,但没有警告或错误。我错过了什么?
【问题讨论】:
-
你可以尝试添加
await realm.GetSession().WaitForUploadAsync()- 完成后,本地数据将与领域对象服务器同步。这是文档:realm.io/docs/xamarin/1.6.0/api/reference/… -
@NikolaIrinchev 代码似乎没有超过 WaitForUploadAsync。断点不命中,System.Diagnostic.Debug.WriteLine 调用不打印。在任何 try/catch 块或 Session.Error 中仍然没有错误。如果我在向领域写入任何内容之前发出此调用,我就会遇到这种行为。应用程序输出:[Mono] DllImport 搜索:'realm-wrappers' ('librealm-wrappers.so')。 [单声道] 搜索“realm_syncsession_wait”。 [单声道] 探测 'realm_syncsession_wait'。 [单声道] 发现为 'realm_syncsession_wait'。 [单声道] [0x96d92930] 工人停车,超时?没有中断?没有
-
Hm... 另一个问题,您的
realmUrl似乎缺少您发布的 sn-p 中的端口 - 这是您的应用程序中的情况,还是只是在 SO 上粘贴代码时的疏忽?如果是这种情况,那么您需要像realm://###.###.###.###:9080/~/newrealm这样的端口 -
@NikolaIrinchev 非常感谢您抽出宝贵时间提供帮助!
标签: xamarin xamarin.android realm realm-mobile-platform realm-object-server