どのように私は、ランダムキー(firebaseユーザーID)を指すことができます

ムハンマドOwais Chaudharyさん:

私はからデータを取得したいFirebase私が代わりにソート使って、作成日付と時間を節約するために、すべての利用者の子を作成する他の方法を発見していない作成日時に応じたorderByChild("Create")が、すべてのユーザーは、私が指すことができますどのようにランダムIDで保存されますの子でソートするには:

DatabaseReference userref = FirebaseDatabase.getInstance().getReference().child("Connection").child("Admin");
        userref.orderByChild("Create");

        userref.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                if (dataSnapshot.exists()) {
                    for (DataSnapshot userSnapshot : dataSnapshot.getChildren()) {

                        Users users = userSnapshot.getValue(Users.class);
                        adminsList.add(users);

                    }
                    mAdapter = new Adapter_All_Admins(adminsList);
                    mRecyclerView.addItemDecoration(new DividerItemDecoration(getContext(), LinearLayoutManager.VERTICAL));
                    mRecyclerView.setAdapter(mAdapter);


                }

            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });


Firebaseユーザーデータイメージ

アレックス・マモ:

あなたのコード内の単一の問題よりもあります。

I(「作成」)の代わりにorderByChildを使用して作成日時ソートを節約するために、すべての利用者の子を作成する他の方法を発見していません

それは、すべてのユーザー用に別のノードを作成するために推奨されるアプローチです。最初の問題はFirebaseリアルタイムデータベースクエリを使用すると、既存のクエリのプロパティを変更することができないことをその手段は、不変であるということです。あなたが呼び出すことで値を変更した場合.orderByChild("Create")の方法を、それが新しいクエリになります。それはの場合とまったく同じ動作だ文字列クラス。だから、これを解決するために、すべてのメソッド呼び出しをチェーンし、単一でそれらを保存してくださいQuery対象:

Query userref = FirebaseDatabase.getInstance().getReference()
    .child("Connection")
    .child("Admin")
    .orderByChild("Create");

それとも、新しい作成することができQuery、このようなオブジェクトを:

Query createQuery = userref.orderByChild("Create");
createQuery.addValueEventListener(/* ... */);

関連性の高い結果を持っている第二の問題は、タイムスタンプがすべきことをしてくださいノートではない文字列として格納さ:

作成: "2019年9月11日02.32を:54"

この場合、順番は次のようになりますので、辞書順あなたは間違いなく、それらを保存する必要がありますのでServerValue.TIMESTAMP、以下のようにポストから私の答えで説明しました:

第3の問題は、データベース内のプロパティは大文字で始めているということです。あなたのフィールド場合Usersクラスは小文字ですか大文字で始めている場合でも、次のエラーを取得する可能性があります:

W / ClassMapper:なしセッター/フィールドCreateクラスのユーザーで発見

これを解決するには、以下のいずれかのポストからの回答を使用する必要があります。

または、次のポストから:

編集:

照会すると、UIDを追加する必要はありません0yozyNJzCvTWtRU8ufe5Zx8TPvu1子供のように。あなただけへの参照を取得する必要Admin(実際にはユーザーオブジェクトです)子どもを通過して、ループを。あなたが呼び出すと.orderByChild("Create")、あなたは変換されているDatabaseReferenceにオブジェクトをQueryオブジェクト、あなたがに応じて、すべてのユーザーを注文されているCreateプロパティ。

あなたはへの明示的な呼び出しを追加する必要がありchild("0yozyNJzCvTWtRU8ufe5Zx8TPvu1")そうでない場合、あなたはそれを行う必要はありません、あなたは特定のユーザobectを取得したい場合にのみ。

またはあなたが.orderByChild()があまりにもサブ子のために働くことができます?

はい、それは動作します。試してみる ;)

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=335863&siteId=1