firebase 실시간 데이터베이스를 사용하여 데이터를 정렬하고 필터링하려고합니다. 한 경우에는 OrderByKey를 사용하고 싶습니다. (데이터를 정렬하기 위해 먼저 새 질문이 필요하고 푸시 기능을 사용하여 키가 생성됩니다.) 다른 경우에는 OrderByChild를 사용하고 있습니다 (왜냐하면 타임 스탬프를 사용하여 정렬하기 때문에이 경우에는 ' push를 사용하지만 사용자의 uid를 키로 사용).OrderByKey는 정상적으로 작동하지만 OrderByChild는 firebase 실시간 데이터베이스에서 예기치 않은 결과를 나타냅니다.
두 경우 모두 가장 최근의 일/사람 (질문/사용자)이 먼저 필요하므로 내림차순으로 순서를 지정해야합니다 (클라이언트 쪽에서도 그 반대입니다). 그래서 첫 번째 쿼리 후 쿼리 방법입니다. 첫 번째 쿼리는 아래에 표시된 쿼리에 endAt(endAtKey)
부분이 없습니다. OrderByKey를 들어
: OrderByChild를 들어
ref.child("questions").orderByKey().endAt(endAtKey).limitToLast(10);
//data at questions node looks like this
{
"-L1CbnCkXJiRT9MKpoP1" : {
"mCorrectAnswer" : 1,
"mOptionA" : "ueud",
"mOptionB" : "h",
"mOptionC" : "h",
"mOptionD" : "h",
"mProblem" : "4shsudududududududurududu"
},
"-L1Dd9x6ws5di2rf8yay" : {
"mCorrectAnswer" : 1,
"mOptionA" : "sh",
"mOptionB" : "shsh",
"mOptionC" : "hehs",
"mOptionD" : "hssh",
"mProblem" : "12ffsnsjsjdbxbddhdbdbddjebddb"
}
:
mDatabaseReference.child("user_list").orderByChild("mTimeStamp")
.endAt(endAtKey).limitToLast(10);
//data at user_list reference looks like this
{
"VH78axip1bXN9dktsF4Az0oBche2":
"mTimeStamp": "1508782492973",
"mUserName": "Satyam Kumar"
},
"2MedW9KSYTcB8I1qp0xcoNuwPEf1":
"mTimeStamp": "1508823085614",
"mUserName": "Thirunagari Yeshwanth"
}
내가 너무 onDataChange
10 그룹의 데이터와 RecyclerView을 채우려는 내가 처음의 키를 저장 아이가 onDataChange
방법으로 받았습니다.
if (countCopy == 1) { // while iterating through children this variable tells
//the index of the loop.
endAtKey = currentKey;
Log.e("endKey", endAtKey);
}
지금 내가 직면하고있는 문제는
OrderByKey
쿼리 (수신 된 데이터가 예상된다에도 효과가있을 것이다) 그러나
endAtKey
항상
OrderByChild
쿼리에 대해 동일 나는
endAtKey
벌금을 수신하고 위의 쿼리를 사용하여 데이터의 후속 페치에 수신되는 데이터는 항상 동일합니다. 이 문제를 어떻게 해결할 수 있습니까?
'OrderByChild' 쿼리에서 로그를 볼 때'endAtKey'는 uid 또는 timestamp입니까? –
@ RosárioPereira 그것은 타임 스탬프입니다. 오, 당신 의견에 문제가 있다고 생각합니다. Uid와 함께 해보겠습니다. :) –
@ RosárioPereiraFernandes 나는 이전의 코멘트에서 잘못 말했다. 내가 사용하고있는 것은 Uid이다. 그래서 우리는 timeStamp를 사용해야한다고 생각합니다. 왜냐하면 그것이 우리가 질의를하기 때문입니다. 타임 스탬프를 다시 확인하겠습니다. –