2016-06-19 3 views
2

현재 응용 프로그램에 대해 영역을 사용하고 있지만이 오류를 쓰는 경우에는 모두 확인했습니다. beginTransaction()commitTransaction()도 제대로 사용할 수 있지만, 여전히이 나타잘못된 트랜잭션 상태, 잘못된 트랜잭션 유형 또는 트랜잭션 진행 중임)

오류 :

io.realm.exceptions.RealmError: Unrecoverable error. Wrong transactional state (no active transaction, wrong type of transaction, or transaction already in progress) in io_realm_internal_SharedGroup.cpp line 157 
                    at io.realm.internal.SharedGroup.nativeAdvanceRead(Native Method) 
                    at io.realm.internal.SharedGroup.advanceRead(SharedGroup.java:83) 
                    at io.realm.internal.ImplicitTransaction.advanceRead(ImplicitTransaction.java:35) 
                    at io.realm.internal.SharedGroupManager.advanceRead(SharedGroupManager.java:76) 
                    at io.realm.HandlerController.realmChanged(HandlerController.java:384) 
                    at io.realm.HandlerController.handleMessage(HandlerController.java:116) 
                    at android.os.Handler.dispatchMessage(Handler.java:98) 
                    at android.os.Looper.loop(Looper.java:136) 
                    at android.app.ActivityThread.main(ActivityThread.java:5052) 
                    at java.lang.reflect.Method.invokeNative(Native Method) 
                    at java.lang.reflect.Method.invoke(Method.java:515) 
                    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
                    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:609) 
                    at dalvik.system.NativeStart.main(Native Method) 

코드의 조각은 다음과 같습니다

HashMap<String,String> msg = (HashMap)dataSnapshot.getValue(); 
     Message message = new Message(); 
     message.setSender(msg.get(COLUMN_SENDER)); 
     message.setText(msg.get(COLUMN_TEXT)); 
     message.setTime(msg.get(COLUMN_TIME)); 
     message.setStatus(msg.get(COLUMN_STATUS)); 

     try { 
      Realm realm = Realm.getInstance(realmConfig); 
      Realm realm2 = Realm.getInstance(realmConfig); 

      message.setDate(sDateFormat.parse(SnapshotKey)); 
      // Hawk.put(SnapshotKey, message); 
      RealmResults<MessageRealm> result = realm.where(MessageRealm.class) 
        .equalTo("key", SnapshotKey) 
        .findAll(); 
      if (result.size()==0){ 
       realm.beginTransaction(); 
       MessageRealm messageRealm=realm.createObject(MessageRealm.class); 
       messageRealm.setSender(msg.get(COLUMN_SENDER)); 
       messageRealm.setText(msg.get(COLUMN_TEXT)); 
       messageRealm.setStatus(msg.get(COLUMN_STATUS)); 
       messageRealm.setTime(msg.get(COLUMN_TIME)); 
       messageRealm.setKey(SnapshotKey); 
       messageRealm.setChatWith(ReciOtherEmail); 
       realm.commitTransaction(); 

       String userEmailKeyY=ReciOtherEmail; 
       String keyEmail=userEmailKeyY; 
       Log.e("SahajLOG5", "KeyEmail " + userEmailKeyY); 
       Log.e("SahajLOG", "REALM ADDED TRANSACTION INITIATED "); 
       RealmResults<ToTal_ProfileModelRealmClass> resultForProfileInfo = realm2.where(ToTal_ProfileModelRealmClass.class) 
         .equalTo("userEmailKey", keyEmail) 
         .findAll(); 
       Log.e("SahajLOGL", "REALM REsult <--CorrectionLegacy--> " + resultForProfileInfo); 
       if(resultForProfileInfo.size()!=0){ 
    -->     realm2.beginTransaction(); 
    -->     currentChatRealmModelClass obj=realm.createObject(currentChatRealmModelClass.class); 
    -->     obj.setUserEmailKey(keyEmail); 
    -->     obj.setMessage(msg.get(COLUMN_TEXT)); 
    --> obj.setHashname(resultForProfileInfo.get(0).getHashname()); 
    --> obj.setUserNAME(resultForProfileInfo.get(0).getUserNAME()); 
    --> obj.setPicOfllineName(resultForProfileInfo.get(0).getPicOfflineName()); 
    -->     obj.setPicurl(resultForProfileInfo.get(0).getPicurl()); 
    -->      realm2.commitTransaction(); 
       } 

      } 



     }catch (Exception e){ 
      Log.d(TAG, "Couldn't parse data in MessageDataSource Class " + e); 
     } 
     if(callbacks != null){ 
      callbacks.onMessageAdded(message); 
     } 

나는 실제로 그것이 발생하는 -->으로 표시했습니다. 나는 resultForProfileInfo 클래스를 로그인 할 때

는 N, 그것은 더 명확하게 또한 이미 기본 키가 있음을 지적 오류가 발생했습니다 내가 로그 캣에서 보았을 때 나는이 문제를 해결,

+0

모든 예외를 포착합니다. 'commitTransaction()'전에 예외가 발생하면 다음 번에이 메소드로 실행되며, 마지막으로 시작된 트랜잭션이 커밋되거나 취소되지 않기 때문에 예외가 발생합니다. – beeender

+0

고마워, 고쳤다. –

답변

0

그래서 널 아니었다 , 그것은 다시 저장되고있었습니다. 그래서, 나는 realmClass의 새로운 객체를 만들고 나서 그것을 업데이트했습니다.

-->  currentChatRealmModelClass obj=new currentChatRealmModelClass();//realm.createObject(currentChatRealmModelClass.class); 
        obj.setUserEmailKey(keyEmail); 
        obj.setMessage(msg.get(COLUMN_TEXT)); 
        obj.setHashname(resultForProfileInfo.get(0).getHashname()); 
        obj.setUserNAME(resultForProfileInfo.get(0).getUserNAME()); 
        obj.setPicOfllineName(resultForProfileInfo.get(0).getPicOfflineName()); 
        obj.setPicurl(resultForProfileInfo.get(0).getPicurl()); 
     -->   realm2.beginTransaction(); 
     -->   realm.copyToRealmOrUpdate(obj); 
     -->   realm2.commitTransaction(); 
관련 문제