首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果用于打开同一个文件,则域服务器配置上的autentication问题不能不同。

如果用于打开同一个文件,则域服务器配置上的autentication问题不能不同。
EN

Stack Overflow用户
提问于 2017-10-07 09:11:00
回答 1查看 144关注 0票数 0

我是新来的王国。我在域服务器上对不同用户的修改遇到了困难。我编写了几行代码来测试服务器和域分离的后续登录。

  • 我使用第一个用户pluto@qui.li登录。
  • 我填充了一个RealmObject (UserApp)并将其保存到服务器
  • 我用pluto@qui.li注销
  • 我用第二个用户paperino@qui.li登录
  • 我检查没有为这个用户填充UserApp (域分离)
  • 我用paperino@qui.li注销
  • 然后,我再次尝试使用第一个用户pluto@qui.li登录,但是我得到了以下错误消息:

代码语言:javascript
复制
*java.lang.IllegalArgumentException: Configurations cannot be different if used to open the same file.
Cached configuration:
realmDirectory: /data/user/0/com.my.assistant/files/realm-object-server/621c2e6db5e0cf421741f6e9a428c3dc/621c2e6db5e0cf421741f6e9a428c3dc
realmFileName : default
canonicalPath: /data/data/com.my.assistant/files/realm-object-server/621c2e6db5e0cf421741f6e9a428c3dc/621c2e6db5e0cf421741f6e9a428c3dc/default
key: [length: 0]
schemaVersion: 0
migration: null
deleteRealmIfMigrationNeeded: false
durability: FULL
schemaMediator: io.realm.DefaultRealmModuleMediator@5208266
readOnly: false
compactOnLaunch: null
serverUrl: realm://localhost:9080/621c2e6db5e0cf421741f6e9a428c3dc/default
user: {UserId: 621c2e6db5e0cf421741f6e9a428c3dc, AuthUrl: http://localhost:9080/auth, IsValid: false, Sessions: 0}
errorHandler: com.my.assistant.LoginInstrTest2$1@397b523
deleteRealmOnLogout: false
waitForInitialRemoteData: false
New configuration:
realmDirectory: /data/user/0/com.my.assistant/files/realm-object-server/621c2e6db5e0cf421741f6e9a428c3dc/621c2e6db5e0cf421741f6e9a428c3dc
realmFileName : default
canonicalPath: /data/data/com.my.assistant/files/realm-object-server/621c2e6db5e0cf421741f6e9a428c3dc/621c2e6db5e0cf421741f6e9a428c3dc/default
key: [length: 0]
schemaVersion: 0
migration: null
deleteRealmIfMigrationNeeded: false
durability: FULL
schemaMediator: io.realm.DefaultRealmModuleMediator@5208266
readOnly: false
compactOnLaunch: null
serverUrl: realm://localhost:9080/621c2e6db5e0cf421741f6e9a428c3dc/default
user: {UserId: 621c2e6db5e0cf421741f6e9a428c3dc, AuthUrl: http://localhost:9080/auth, IsValid: true, Sessions: 0}
errorHandler: com.my.assistant.LoginInstrTest2$1@cdafa20
deleteRealmOnLogout: false
waitForInitialRemoteData: false
at io.realm.RealmCache.validateConfiguration(RealmCache.java:461)
at io.realm.RealmCache.doCreateRealmOrGetFromCache(RealmCache.java:337)
at io.realm.RealmCache.createRealmOrGetFromCache(RealmCache.java:284)
at io.realm.Realm.getInstance(Realm.java:301)
at com.my.assistant.LoginInstrTest2.setConfigurationSyncUser(LoginInstrTest2.java:149)
at com.my.assistant.LoginInstrTest2.loginUser(LoginInstrTest2.java:129)
at com.my.assistant.LoginInstrTest2.veryfyRealmUserInstance(LoginInstrTest2.java:98)
at java.lang.reflect.Method.invoke(Native Method)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.junit.runners.Suite.runChild(Suite.java:128)
at org.junit.runners.Suite.runChild(Suite.java:27)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at org.junit.runner.JUnitCore.run(JUnitCore.java:115)
at android.support.test.internal.runner.TestExecutor.execute(TestExecutor.java:59)
at android.support.test.runner.AndroidJUnitRunner.onStart(AndroidJUnitRunner.java:262)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:2074)*

有人能告诉我为什么吗?我使用此代码的目的是使用领域测试android应用程序的胚胎登录/注销。用户应该使用不同的凭据登录和退出应用程序。在我看来,应该有一种方法可以为该用户获得先前创建的SyncConfiguration,而不是创建一个新的…。但是,如果是这样的话,我不知道怎么做…。

这是我的密码:

//-主要代码:

代码语言:javascript
复制
  SyncUser userLogged;

    //Login with first user. This time the login completes successfully
    userLogged = loginUser("pluto@qui.li", "pluto");

    insertUserAppSyncRealm();

    RealmResults<UserApp> res = realm.where(UserApp.class)
            .beginsWith("username", "situs")
            .findAll();
    System.out.println(" @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ Size table pippo " + res.size());
    UserApp resUser = res.last();
    System.out.println(" @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ID " + resUser.getId());

    userLogged.logout();

    //Login with second user OK
    userLogged = loginUser("paperino@qui.li", "paperino");

    RealmResults<UserApp> res2 = realm.where(UserApp.class)
            .beginsWith("username", "situs")
            .findAll();  //arrivato qui da "Configurations cannot be different if used to open the same file"
    System.out.println(" @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ Size table usertest " + res2.size());

    userLogged.logout();

    //Login again with first user. This time the login fails ("Configurations cannot be different if used to open the same file")
    userLogged = loginUser("pluto@qui.li", "pluto");

    RealmResults<UserApp> res3 = realm.where(UserApp.class)
            .beginsWith("username", "situs")
            .findAll();
    System.out.println(" @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ Size table pippo " + res3.size());

    userLogged.logout();

//

代码语言:javascript
复制
public SyncUser loginUser(String username, String password) {
    SyncUser userLogged;
    SyncCredentials myCredentials = SyncCredentials.usernamePassword(username, password, false);
    userLogged = SyncUser.login(myCredentials, authURL);
    setConfigurationSyncUser(userLogged);
    return userLogged;
}

public void setConfigurationSyncUser(SyncUser user) {
    String user1RealmUrl = "realm://localhost:9080/~/default";
    SyncConfiguration config = new SyncConfiguration.Builder(user, user1RealmUrl).
            errorHandler(new SyncSession.ErrorHandler() {
                public void onError(SyncSession session, ObjectServerError error) {
                    fail("Realm unexpected error: " + error);
                }
            })
            .build();

        realm = Realm.getInstance(config);  //fails ("Configurations cannot be different if used to open the same file")
}

public void insertUserAppSyncRealm() {
    UserApp user = new UserApp();
    populateUser(user);
    realm.beginTransaction();
    realm.insert(user);
    realm.commitTransaction();
}

private void populateUser(UserApp user) {
    user.setUsername("situs@qui.it");
    user.setPassword("12345678");
    user.setId(UUID.randomUUID().toString());
}

谢谢你的忠告..。

EN

回答 1

Stack Overflow用户

发布于 2017-10-07 09:23:47

您可以尝试使用以下代码:

代码语言:javascript
复制
public void setConfigurationSyncUser(SyncUser user) {
    String user1RealmUrl = "realm://localhost:9080/~/default";
    class SyncErrorHandler implements SyncSession.ErrorHandler {
        @Override
        public void onError(SyncSession session, ObjectServerError error) {
            fail("Realm unexpected error: " + error);
        }

        @Override
        public int hashCode() {
            return SyncErrorHandler.class.hashCode();
        }

        @Override
        public boolean equals(Object obj) { 
            return obj != null && obj instanceof SyncErrorHandler;
        }
    };
    SyncConfiguration config = new SyncConfiguration.Builder(user, user1RealmUrl).
            errorHandler(new SyncErrorHandler())
            .build();

        realm = Realm.getInstance(config);
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46618539

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档