无法以 Xamarin 形式在路径 xxx 处打开领域

Unable to open a realm at path xxx in Xamarin forms

我正在从同步到本地领域的远程 MongoDB 领域读取数据,但同步后我似乎无法从本地领域读取数据。

这是我尝试从本地领域读取时收到的消息:

Unable to open a realm at path '/data/user/0/com.companyname.appname/files/default.realm': Incompatible histories. Expected a Realm with no or in-realm history, but found history type 3 Path:Exception backtrace:\n<backtrace not supported on this platform>.

这是我的代码:

private async Task<Realm> OpenRealm()
{

    try
    {

        var user = App.realmApp.CurrentUser;

        //if user is not logged on yet log on the user and sync
        if (user == null)
        {


            var CurrentUser = await App.realmApp.LogInAsync(Credentials.Anonymous());
            var config = new SyncConfiguration("Hirschs", CurrentUser);
            _realm = await Realm.GetInstanceAsync(config);

            return _realm;

        }
        else
        {

            return _realm = Realm.GetInstance();

        }


    }
    catch (Exception ex)
    {
        await UserDialogs.Instance.AlertAsync(new AlertConfig
        {
            Title = "An error has occurred",
            Message = $"An error occurred while trying to open the Realm: {ex.Message}"
        });

        // Try again
        return await OpenRealm();
    }

}

这里的问题是您正在尝试在已同步领域所在的相同路径中创建一个新的本地领域。

我想你想同步打开同一个领域(如果设备处于离线状态,这是必需的)。在这种情况下,您只需要对同步和异步调用使用相同的配置,如文档 here.

中所述

你可以这样做:

private async Task<Realm> OpenRealm()
{
    try
    {
        var currentUser = App.realmApp.CurrentUser;

        if (currentUser == null)
        {
            var currentUser = await App.realmApp.LogInAsync(Credentials.Anonymous());
            var config = new SyncConfiguration("Hirschs", currentUser);
            _realm = await Realm.GetInstanceAsync(config);

            return _realm;
        }
        else
        {
            var config = new SyncConfiguration("Hirschs", currentUser);
            _realm = Realm.GetInstance(config);

            return _realm;
        }
    }
    catch (Exception ex)
    {
        await UserDialogs.Instance.AlertAsync(new AlertConfig
        {
            Title = "An error has occurred",
            Message = $"An error occurred while trying to open the Realm: {ex.Message}"
        });
    }
}