Heim  >  Artikel  >  Java  >  Wie zeige ich ein einzigartiges, zufälliges Produkt aus Firebase an, ohne alle Daten herunterzuladen?

Wie zeige ich ein einzigartiges, zufälliges Produkt aus Firebase an, ohne alle Daten herunterzuladen?

Susan Sarandon
Susan SarandonOriginal
2024-10-27 22:27:02970Durchsuche

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

Wie erhalte ich ein eindeutiges Zufallsprodukt in Node Firebase?

Daten:

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

Herausforderung :

Sie möchten dem Benutzer nur ein eindeutiges, zufälliges Produkt anzeigen und vermeiden, dass alle Produkte heruntergeladen werden müssen.

Lösung 1: Klassischer Ansatz

  1. Fügen Sie untergeordnete Elemente („Produkte“) zu Ihrer Referenz hinzu, um den richtigen Knoten in der Datenbank anzusprechen.
  2. Durchlaufen Sie alle untergeordneten Knoten des Produktknotens.
  3. Fügen Sie die Namen der Produkte zu einer Liste hinzu.
  4. Erhalten Sie einen zufälligen Index innerhalb der Listengröße.
  5. Fügen Sie das Produkt am zufälligen Index zur randomProductList hinzu.
<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>

Lösung 2: Denormalisierungsansatz

  1. Erstellen Sie einen neuen Knoten namens „productIds“ in der Datenbank.
  2. Fügen Sie einen Schlüssel für jede Produkt-ID unter den „productIds“ hinzu Knoten.
  3. Fragen Sie den Knoten „productIds“ ab, um die Produkt-IDs zu erhalten.
  4. Generieren Sie einen zufälligen Index innerhalb der Anzahl der Produkt-IDs.
  5. Fragen Sie den Knoten „products“ mithilfe der zufälligen Produkt-ID ab um die Produktdetails zu erhalten.
<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>

Das obige ist der detaillierte Inhalt vonWie zeige ich ein einzigartiges, zufälliges Produkt aus Firebase an, ohne alle Daten herunterzuladen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn