강의

멘토링

로드맵

Inflearn Community Q&A

peoplebb1965's profile image
peoplebb1965

asked

From Kotlin Android to Firebase Server and Creating a Great Chatbot

Reading data (synchronous)

데이터읽기(동기)강좌에 버그가 있는것 같습니다.

Written on

·

163

0

데이터 읽기 (동기) 강좌의

마지막 부분 메모리 누수를 막기위해서 아래와 같이 사용한다고 말씀해 주신 부분에

문제가 있어 보입니다.

테스트해본 결과

문서추가를 눌러서 새로운 문서를 추가해놓고

기존에 문서중 하나를 삭제한 상태에서

새로 추가했던 문서의 필드를 수정할경우 에러가 발생합니다.

DocumentChange.Type.ADDED -> {

realTimeArrayList.add(item.document.toObject(UserDTO::class.java)) // 오브젝트만 담음

realtimeKeyArrayList.add(item.document.id) // 문서의키값만 가져다 담음

}

DocumentChange.Type.MODIFIED -> updateItem(item.document.id, item.document.toObject(UserDTO::class.java))

DocumentChange.Type.REMOVED -> deleteItem(item.document.id)

====================================

06-02 20:45:20.777 3940-3940/com.test.good E/AndroidRuntime: FATAL EXCEPTION: main

Process: com.test.good, PID: 3940

java.lang.IndexOutOfBoundsException: Index: 3, Size: 3

at java.util.ArrayList.set(ArrayList.java:453)

at com.test.good.ReadActivity.updateItem(ReadActivity.kt:87)

at com.test.good.ReadActivity$onCreate$2.onEvent(ReadActivity.kt:73)

at com.test.good.ReadActivity$onCreate$2.onEvent(ReadActivity.kt:16)

at com.google.firebase.firestore.zzi.onEvent(Unknown Source:16)

at com.google.android.gms.internal.zzevc.zza(Unknown Source:6)

at com.google.android.gms.internal.zzevd.run(Unknown Source:6)

at android.os.Handler.handleCallback(Handler.java:789)

at android.os.Handler.dispatchMessage(Handler.java:98)

at android.os.Looper.loop(Looper.java:164)

at android.app.ActivityThread.main(ActivityThread.java:6541)

at java.lang.reflect.Method.invoke(Native Method)

at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)

at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)

androidchatbotkotlin

Answer 2

0

peoplebb1965님의 프로필 이미지
peoplebb1965
Questioner

답변주신데로

realTimeKeyArrayList.removeAt(position)

break

를 추가하니까 됩니다~ㅋ;

break 꼭 써줘야 되나 봅니다... break 안써주면 또 다른 에러가 발생하네요^^ㅎㅎ;

0

you68780911님의 프로필 이미지
you68780911
Instructor

안녕하세요 하울입니다.
일단 제가 추측되는 에러로는

fun deleteItem(deleteKey: String) {

    for ((position, item) in realTimeKeyArrayList.withIndex())
        if (deleteKey == item) {
            realTimeArrayList.removeAt(position)
            realTimeKeyArrayList.removeAt(position)
            break
        }

}

코드를 이렇게 수정해주시면 에러가 발생되지 않을 것 같습니다.
아마 삭제하는 부분에 두가지 코드를 삭제해야 BoundsException이 발생되지 않을뜻한데 하나만 삭제해서 발생한것 같습니다.
혹시 조치하고 이상이 없다고 말씀해주시면 코드를 보완해 놓도록 하겠습니다.

peoplebb1965's profile image
peoplebb1965

asked

Ask a question