2016-06-09 5 views
1

이 모든 시간, 나는 RealmConfiguration이 생성 될 때 영역 파일이 생성되었다고 생각했습니다. 그러나 오늘 내가 관찰했을 때 Realm.getDefaultInstance()를 사용하여 데이터가 기록 될 때 영역 파일이 만들어졌습니다. 우리는 우리의 응용 프로그램에 로그인/로그 아웃 기능을 가지고 있습니다. 응용 프로그램 클래스에 영역 구성이 정의되어 있습니다.영역 파일을 찾을 수 없습니다. 오류 안드로이드

val realmConfiguration = RealmConfiguration.Builder(this) 
       .schemaVersion(1) 
       .migration(RealmMigrationClass()) 
       .build() 

Realm.setDefaultConfiguration(realmConfiguration) 

로그인하는 동안 사용자 및 사용자 관련 정보를 백엔드에서 가져 와서 영역에 저장합니다.

로그 아웃 중에 모든 앱 관련 데이터를 삭제합니다. 즉, getFilesDir()에서도 파일을 삭제합니다. 따라서 로그 아웃하는 동안 영역 파일이 삭제됩니다.

relogin 중에 로그인 활동이 호출되고 (MainApp의 realmConfiguration이 방해받지 않음) 다시 사용자 세부 정보가 반입되고 영역에 저장됩니다.

Google은 소셜 로그인을 앱에 통합했습니다. Google SignIn의 경우 mGoogleApiClient가 초기화 된 로그인 활동 이외의 다른 곳에서는 로그 아웃 할 수 없습니다. 따라서 Google은 로그 아웃 중에 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) 
      } 
     } 

우리는 사용자 정의 로그인, 로그 아웃을 지원합니다. 우리는 지저귐 로그인/로그 아웃을 가지고, 우리는 페이 스북 로그인/로그 아웃 구글 이외에있다. 하지만 구글 로그인만으로는 relogin 중에 문제가 발생합니다 (예 : 사용자가 Google 로그인을 포함한 모든 모드를 사용하여 성공적으로 앱에 로그인합니다.) 처음에는 완벽하게 작동하지만 사용자가 로그 아웃하고 Google에 다시 로그인하려고하면 실패합니다. 그러나 다른 사람과 다시 로그인하십시오 모드 사용자 정의, 페이 스북 및 트위터 완벽하게 잘 작동). 로그인 후에는 사용자 정보를 영역에 기록하는 동안 영역 파일이 존재하지 않으며 예기치 않은 오류가 발생했다고 불평합니다. 그 예기치 않은 오류가 발생하면 다시 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.deleteRealm()' – geisshirt

+0

로그인이 일어난 후에 파일을 어떻게 든 삭제하는 것처럼 들리지만, 위의 정보가 주어진 이유와 이유를 알기 힘듭니다 그런 일이 일어나고 있습니다. –

+0

@ChristianMelchior 안녕하세요 크리스천, 나는 아무 것도 삭제하지 않을 것입니다. 예외 추적 부분을 추가했습니다. 그것은 어떤 단서를 제공합니까? – User

답변

-1

Google 로그인 중에 Auth.GoogleSignInApi.signOut (mGoogleApiClient)을 제거하고 사용자와 관련된 Google의 모든 정보를 수집 한 후 로그 아웃 코드를 입력하여이 문제를 해결했습니다.

관련 문제