0

我啓動了一個新的ROS在谷歌雲計算的Ubuntu虛擬機後顯示爲空,我試圖寫經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("[email protected]", "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上成功創建了新領域,但即使在多次運行此代碼之後,它仍然根據儀表板和Realm瀏覽器爲空。在我的評論中你會注意到,本地領域確實包含了書寫的對象,而不是遙控器。執行此代碼時,服務器日誌顯示大量消息,但沒有警告或錯誤。我錯過了什麼?

+0

您可以嘗試添加'await realm.GetSession()。WaitForUploadAsync()' - 完成後,本地數據將與Realm Object Server同步。這裏的文檔:https://realm.io/docs/xamarin/1.6.0/api/reference/Realms.Sync.Session.html#Realms_Sync_Session_WaitForUploadAsync –

+0

@NikolaIrinchev代碼似乎不會通過WaitForUploadAsync進展。斷點不命中並且System.Diagnostic.Debug.WriteLine調用不打印。在任何try/catch塊或Session.Error中仍然沒有錯誤。如果我在將任何內容寫入領域之前發出此調用,我都會遇到此行爲。應用程序輸出:[Mono] DllImport搜索:'realm-wrappers'('librealm-wrappers.so')。 [單聲道]正在搜索'realm_syncsession_wait'。 [單聲道]探測'realm_syncsession_wait'。 [Mono]找到'realm_syncsession_wait'。 [單聲道] [0x96d92930]工作者停車,超時?沒有中斷?沒有 – aweFalafelApps

+0

嗯...另一個問題,你的'realmUrl'似乎缺少你發佈的代碼片段中的端口 - 這是你的應用中的情況,還是僅僅是在SO上粘貼代碼時的疏忽?如果是這樣的話,那麼你需要像'realm://###.###.###.###:9080 /〜/ newrealm' –

回答

1

感謝Nikola找出我缺少領域URL上的端口號。添加後,一切似乎都正常工作。

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

似乎很奇怪,沒有任何形式的錯誤被拋出,對象已只是默默不寫入遠程境界。

+0

很高興幫助!爲了詳細說明缺少錯誤,Realm移動平臺設計爲在設備脫機時正常工作。在這種情況下,當它無法連接到服務器時,它會認爲它處於脫機狀態,或者出於某種原因(例如代理或其他網絡問題)無法訪問服務器。因此,它在本地存儲數據,並且只要連接恢復,它就會上傳所有內容。 –

+0

當網絡連接存在時,可能至少會顯示某些診斷輸出,但無法建立與遠程領域的連接? – aweFalafelApps