firebaseリアルタイムデータベースを使用してデータを注文し、フィルタリングしようとしています。あるケースでは、OrderByKeyを使用したい(新しい質問が最初に必要で、キーがプッシュ機能を使用して生成されるため)、別のケースではOrderByChildを使用している(タイムスタンプを使用してソートしたいので、プッシュを使用しますが、ユーザーのIDをキーとして使用します)。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"
}
私は10のグループのデータとRecyclerViewを移入したいのでonDataChange
に、私は最初のキーを保存子供は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かタイムスタンプですか? –
@RosárioPereiraFernandesタイムスタンプです。ああ、私はあなたのコメントに問題があると思う、私はUidとそれをやってみるありがとうございます。 :) –
@RosárioPereiraFernandes私は再び確認した私は前のコメントで間違って言った。私が使用しているのはUidです。だから私はそれが私たちが照会しているものなので、私はtimeStampでそれを行うべきだと思います。タイムスタンプでもう一度チェックします。 –