Heim > Java > javaLernprogramm > Hauptteil

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

Susan Sarandon
Freigeben: 2024-10-27 22:27:02
Original
1061 Leute haben es durchsucht

 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
   ......................
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage