C# 无法在Xamarin窗体中打开路径xxx处的域

C# 无法在Xamarin窗体中打开路径xxx处的域,c#,xamarin.forms,realm,C#,Xamarin.forms,Realm,我正在从远程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 h

我正在从远程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>.
无法在路径“/data/user/0/com.companyname.appname/files/default.realm”处打开域:不兼容的历史记录。应为没有或处于域历史记录中的域,但找到了历史记录类型3路径:异常回溯:\n。
这是我的密码:

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();
    }

}
private异步任务OpenRealm()
{
尝试
{
var user=App.realmApp.CurrentUser;
//如果用户尚未登录,请登录该用户并同步
if(user==null)
{
var CurrentUser=wait App.realmApp.LogInAsync(Credentials.Anonymous());
var config=新的同步配置(“Hirschs”,当前用户);
_realm=await realm.GetInstanceAsync(配置);
回归王国;
}
其他的
{
return _realm=realm.GetInstance();
}
}
捕获(例外情况除外)
{
等待UserDialogs.Instance.AlertAsync(新的AlertConfig
{
Title=“发生错误”,
Message=$“尝试打开领域时出错:{ex.Message}”
});
//再试一次
return wait OpenRealm();
}
}

这里的问题是,您试图在同步领域已经存在的同一路径中创建新的本地领域

我假设您希望同步打开同一领域(如果设备处于脱机状态,这是必需的)。在这种情况下,您只需要对同步和异步调用使用相同的配置,如文档中所述

你可以这样做:

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}"
        });
    }
}
private异步任务OpenRealm()
{
尝试
{
var currentUser=App.realmApp.currentUser;
if(currentUser==null)
{
var currentUser=wait App.realmApp.LogInAsync(Credentials.Anonymous());
var config=新的同步配置(“Hirschs”,当前用户);
_realm=await realm.GetInstanceAsync(配置);
回归王国;
}
其他的
{
var config=新的同步配置(“Hirschs”,当前用户);
_realm=realm.GetInstance(配置);
回归王国;
}
}
捕获(例外情况除外)
{
等待UserDialogs.Instance.AlertAsync(新的AlertConfig
{
Title=“发生错误”,
Message=$“尝试打开领域时出错:{ex.Message}”
});
}
}

这里的问题是,您试图在同步领域已经存在的同一路径中创建新的本地领域

我假设您希望同步打开同一领域(如果设备处于脱机状态,这是必需的)。在这种情况下,您只需要对同步和异步调用使用相同的配置,如文档中所述

你可以这样做:

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}"
        });
    }
}
private异步任务OpenRealm()
{
尝试
{
var currentUser=App.realmApp.currentUser;
if(currentUser==null)
{
var currentUser=wait App.realmApp.LogInAsync(Credentials.Anonymous());
var config=新的同步配置(“Hirschs”,当前用户);
_realm=await realm.GetInstanceAsync(配置);
回归王国;
}
其他的
{
var config=新的同步配置(“Hirschs”,当前用户);
_realm=realm.GetInstance(配置);
回归王国;
}
}
捕获(例外情况除外)
{
等待UserDialogs.Instance.AlertAsync(新的AlertConfig
{
Title=“发生错误”,
Message=$“尝试打开领域时出错:{ex.Message}”
});
}
}

看不到在何处使用用户名和密码执行用户验证。我使用的是匿名登录。看不到在何处使用用户名和密码执行用户验证。我使用的是匿名登录。如何在不创建新的本地域实例的情况下同步打开同步域,以便应用程序工作脱机?@PhulusogornRamulifho我添加了一个示例,但更多信息可以在链接中的文档中找到。我如何在不创建新的本地域实例的情况下同步打开同步域,以便应用程序脱机工作?@PhulusogornRamulifho我添加了一个示例,但是更多信息可以在链接中的文档中找到