Все это время я думал, что файл realm создается при создании RealmConfiguration. Но сегодня, когда я наблюдал, файл области создается, когда данные записываются на него с помощью Realm.getDefaultInstance(). У нас есть функция входа/выхода в нашем приложении. У меня есть конфигурация области, определенная в классе Application.Realm Файл не найден ERROR Android
val realmConfiguration = RealmConfiguration.Builder(this)
.schemaVersion(1)
.migration(RealmMigrationClass())
.build()
Realm.setDefaultConfiguration(realmConfiguration)
Во время входа в систему, я извлечь все детали от пользователя и информации, связанной с пользователем из внутреннего интерфейса и сохранить его в области.
Во время выхода из системы я удаляю все связанные с приложением данные (например, я удаляю файлы из getFilesDir(). Поэтому во время выхода из системы файл области удаляется.
Во время релогинга вызывается активность входа (функция RealmConfiguration в MainApp не изменяется), и снова пользовательские данные извлекаются и сохраняются в области.
У нас есть социальный логин, интегрированный в приложение. В Google SignIn мы не могли выходить в другое место, кроме входа в систему, где инициализируется mGoogleApiClient. Таким образом, во время выхода из системы мы не вышли из системы для пользователя google, мы выходим из системы во время следующего запроса на регистрацию.
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 login/Logout, у нас есть логин/выход в facebook в дополнение к google. Но только один знак google вызывает проблему во время relogin (т. Е. Пользователь регистрируется в приложении успешно, используя любой режим, включая google signin. В первый раз работает отлично, но если пользователь выписывает и пытается передислоцировать с Google, он терпит неудачу, но переписывается с другим режимы custom, facebook и твиттер прекрасно работают). После входа в систему, пытаясь записать данные пользователя в область, он жалуется, что файл области не существует и отображается непредвиденная ошибка. После этой неожиданной ошибки снова появляется знак google, который начинает работать с правильной настройкой области.
Код выхода следующий.
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)
У кого-нибудь есть ключ к тому, что происходит?
При выполнении вышеуказанного кода все экземпляры Realm закрыты? Realm действительно предоставляет метод для удаления файлов, связанных с определенной конфигурацией: 'Realm.deleteRealm()' – geisshirt
Похоже, что вы как-то удаляете файлы после входа в систему, но, учитывая приведенную выше информацию, трудно сказать, почему и где это происходит. –
@ChristianMelchior Привет, христианин, я ничего не удаляю. Я добавил часть следа исключения. Это подсказывает. – User