2016-06-09 2 views
1

Все это время я думал, что файл 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) 

У кого-нибудь есть ключ к тому, что происходит?

+0

При выполнении вышеуказанного кода все экземпляры Realm закрыты? Realm действительно предоставляет метод для удаления файлов, связанных с определенной конфигурацией: 'Realm.deleteRealm()' – geisshirt

+0

Похоже, что вы как-то удаляете файлы после входа в систему, но, учитывая приведенную выше информацию, трудно сказать, почему и где это происходит. –

+0

@ChristianMelchior Привет, христианин, я ничего не удаляю. Я добавил часть следа исключения. Это подсказывает. – User

ответ

-1

Эта проблема решена путем удаления Auth.GoogleSignInApi.signOut (mGoogleApiClient) во время google. Войдите и поместите код выписки, как только я собрал всю информацию из Google, связанную с пользователем.

Смежные вопросы