【问题标题】:Realm Object Server shows empty after adding itemsRealm Object Server 添加项目后显示为空
【发布时间】: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


【解决方案1】:

感谢Nikola 发现我错过了领域 url 上的端口号。添加后,似乎一切正常。

var realmUrl = "realm://###.###.###.###:9080/~/newrealm";

似乎很奇怪,没有抛出任何类型的错误,对象只是默默地没有写入远程领域。

【讨论】:

  • 很高兴能帮上忙!为了详细说明没有错误,Realm Mobile Platform 旨在在设备离线时正常工作。在这种情况下,当它无法连接到服务器时,它会假定它处于脱机状态或服务器由于某种原因(例如代理或其他网络问题)无法访问。因此,它将数据存储在本地,只要连接恢复,它就会上传所有内容。
  • 当存在网络连接但无法连接到远程领域时,是否至少可以显示一些诊断输出?
猜你喜欢
  • 1970-01-01
  • 2018-07-02
  • 1970-01-01
  • 2017-08-03
  • 1970-01-01
  • 2021-08-28
  • 1970-01-01
  • 2021-11-30
  • 1970-01-01
相关资源
最近更新 更多