ホームページ  >  記事  >  Java  >  すべてのデータをダウンロードせずに Firebase から固有のランダムな商品を表示するにはどうすればよいですか?

すべてのデータをダウンロードせずに Firebase から固有のランダムな商品を表示するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-10-27 22:27:02970ブラウズ

 How to Display a Unique Random Product from Firebase Without Downloading All Data?

Node Firebase で固有のランダムな商品を取得する方法

データ:

- products
   - -L74Pc7oVY22UsCETFBv
       - name: "gjwj"
       - category: "hreggrrg"
       - location: "vjhiwehifwe"
       - price: 44
       - color: fassaf
   - -L74uJ7oVYcVNyCteFBz
       - name: "uygfwh"
       - category: "hhhjwwwom"
       - location: "pervrr"
       - price: 33
       - color: yrtrr
   ......................

チャレンジ:

すべての商品をダウンロードする必要を避け、一意のランダムな商品を 1 つだけユーザーに表示したいとします。

解決策 1: 従来のアプローチ

  1. データベース内の正しいノードをターゲットにするために、child("products") を参照に追加します。
  2. products ノードのすべての子ノードを反復処理します。
  3. 製品の名前をリストに追加します。
  4. リスト サイズ内のランダムなインデックスを取得します。
  5. ランダムなインデックスの製品をrandomProductList に追加します。
<code class="java">DatabaseReference productsRef = rootRef.child("products");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        List<String> productList = new ArrayList<>();
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            String name = ds.child("name").getValue(String.class);
            productList.add(name);
        }

        int productListSize = productList.size();
        List<String> randomProductList = new ArrayList<>();

        randomProductList.add(new Random().nextInt(productListSize)); //Add the random product to list

        // Update the adapter with the random product
        arrayAdapter.notifyDatasetChanged();
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        Log.d(TAG, "Error: ", task.getException()); //Don't ignore errors!
    }
};
productsRef.addListenerForSingleValueEvent(valueEventListener);</code>

解決策 2: 非正規化アプローチ

  1. データベース内に productIds という新しいノードを作成します。
  2. productIds の下に各製品 ID のキーを追加します。
  3. productIds ノードをクエリして製品 ID を取得します。
  4. 製品 ID の数内でランダムなインデックスを生成します。
  5. ランダムな製品 ID を使用して製品ノードをクエリします製品の詳細を取得するには。
<code class="java">DatabaseReference productIdsRef = rootRef.child("productIds");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        List<String> productIdsList = new ArrayList<>();
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            String productId = ds.getKey();
            productIdsList.add(productId);
        }

        int productListSize = productList.size();
        String randomProductId = productIdsList.get(new Random().nextInt(productListSize));

        DatabaseReference productIdRef = rootRef.child("products").child(randomProductId);
        ValueEventListener eventListener = new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                String name = dataSnapshot.child("name").getValue(String.class);
                Log.d("TAG", name); // Output the random product name
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {
                Log.d(TAG, "Error: ", task.getException()); //Don't ignore errors!
            }
        };
        productIdRef.addListenerForSingleValueEvent(eventListener);
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        Log.d(TAG, "Error: ", task.getException()); //Don't ignore errors!
    }
};
productIdsRef.addListenerForSingleValueEvent(valueEventListener);</code>

以上がすべてのデータをダウンロードせずに Firebase から固有のランダムな商品を表示するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。