所有这些,我一直在想创建RealmConfiguration时创建域文件。但是今天当我观察时,使用Realm.getDefaultInstance()将数据写入它时创建了realm文件。我们的应用程序中有登录/注销功能。我有在Application类中定义的领域配置。
val realmConfiguration = RealmConfiguration.Builder(this)
.schemaVersion(1)
.migration(RealmMigrationClass())
.build()
Realm.setDefaultConfiguration(realmConfiguration)
在登录期间,我从后端获取用户和用户相关信息的所有详细信息并将其存储在领域中。
在注销期间,我删除了所有与应用相关的数据(即)我也从getFilesDir()中删除了文件。因此,在注销期间,域文件将被删除。
在重新登录期间,将调用Login活动(MainApp中的realmConfiguration不受干扰),并再次获取用户详细信息并将其保存在领域中。
我们将社交登录集成到app中。对于Google SignIn,我们无法退出除初始化mGoogleApiClient的登录活动以外的任何地方。因此,在注销期间,我们没有注销谷歌用户,我们会在下次登录请求时注销用户。
googleLogin.onClick {
if(mGoogleApiClient?.isConnected ?:false){
Auth.GoogleSignInApi.signOut(mGoogleApiClient)
val signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
startActivityForResult(signInIntent, RC_GET_TOKEN)
}else{
val signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
startActivityForResult(signInIntent, RC_GET_TOKEN)
}
}
我们支持自定义登录,注销。我们确实有Twitter登录/注销,我们除了谷歌之外还有facebook登录/注销。但只是谷歌登录单独导致问题重新登录(即用户使用任何模式成功使用谷歌登录成功登录应用程序。第一次工作完全正常。但如果用户退出并尝试与谷歌重新登录,它会失败。但与其他人重新登录模式自定义,脸书和推特工作得很好)。登录后,在尝试将用户详细信息写入领域时,它会抱怨领域文件不存在并显示意外错误。在意外错误之后,再次谷歌登录开始正常创建领域。
退出代码如下。
cacheDir.deleteRecursively()
filesDir.deleteRecursively()
AppUtilityFunctions.facebookSignout()
AppUtilityFunctions.twitterSignout(this)
//After logging out launch welcome page
val intent = Intent(this, WelcomeActivity::class.java)
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or
Intent.FLAG_ACTIVITY_CLEAR_TASK or
Intent.FLAG_ACTIVITY_TASK_ON_HOME)
startActivity(intent)
06-13 22:07:29.634 11246-11246/? D/REALM: jni: ThrowingException 5, , .
06-13 22:07:29.634 11246-11246/? D/REALM: Exception has been throw: File not found: .
06-13 22:07:29.634 11246-11246/? D/AndroidRuntime: Shutting down VM
06-13 22:07:29.634 11246-11246/? W/dalvikvm: threadid=1: thread exiting with uncaught exception (group=0x9cccdb20)
06-13 22:07:29.634 11246-11272/? E/CrashlyticsCore: Tried to write a fatal exception while no session was open.
06-13 22:07:29.644 11246-11246/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.clinicloud.app.dev, PID: 11246
io.realm.exceptions.RealmIOException: File not found: .
at io.realm.internal.SharedGroup.createNativeWithImplicitTransactions(Native Method)
at io.realm.internal.SharedGroup.<init>(SharedGroup.java:67)
at io.realm.internal.r.<init>(SharedGroupManager.java:47)
at io.realm.a.<init>(BaseRealm.java:76)
at io.realm.o.<init>(Realm.java:126)
任何人都知道发生了什么事?
答案 0 :(得分:-1)
我通过在Google登录期间删除Auth.GoogleSignInApi.signOut(mGoogleApiClient)来解决此问题,并在收集了与用户相关的Google的所有信息后输出了注销代码。