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, 그것은 더 명확하게 또한 이미 기본 키가 있음을 지적 오류가 발생했습니다 내가 로그 캣에서 보았을 때 나는이 문제를 해결,
모든 예외를 포착합니다. 'commitTransaction()'전에 예외가 발생하면 다음 번에이 메소드로 실행되며, 마지막으로 시작된 트랜잭션이 커밋되거나 취소되지 않기 때문에 예외가 발생합니다. – beeender
고마워, 고쳤다. –