3

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罰金を受け付けております上記のクエリを使用してデータのフェッチでです受信されるデータは常に同じです。 この問題を解決するにはどうすればよいですか?

+0

'OrderByChild'クエリからログを見るとき、' endAtKey'はuidかタイムスタンプですか? –

+0

@RosárioPereiraFernandesタイムスタンプです。ああ、私はあなたのコメントに問題があると思う、私はUidとそれをやってみるありがとうございます。 :) –

+0

@RosárioPereiraFernandes私は再び確認した私は前のコメントで間違って言った。私が使用しているのはUidです。だから私はそれが私たちが照会しているものなので、私はtimeStampでそれを行うべきだと思います。タイムスタンプでもう一度チェックします。 –

答えて

3

OrderByChildクエリの問題は、timestampではなく、取得しているendAtKeyがキーであることです。 OrderByChildはタイムスタンプ属性を照会するために使用されているので、endAtKeyはタイムスタンプであり、キーでなければなりません。

関連する問題