Rumah  >  Artikel  >  Java  >  Bagaimana untuk Memaparkan Produk Rawak Unik daripada Firebase Tanpa Memuat Turun Semua Data?

Bagaimana untuk Memaparkan Produk Rawak Unik daripada Firebase Tanpa Memuat Turun Semua Data?

Susan Sarandon
Susan Sarandonasal
2024-10-27 22:27:02970semak imbas

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

Bagaimana untuk Mendapatkan Produk Rawak Unik dalam Node Firebase?

Data:

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

Cabaran :

Anda mahu memaparkan hanya satu produk rawak unik kepada pengguna, mengelakkan keperluan untuk memuat turun semua produk.

Penyelesaian 1: Pendekatan Klasik

  1. Tambah anak("produk") pada rujukan anda untuk menyasarkan nod yang betul dalam pangkalan data.
  2. Lelaran melalui semua nod anak nod produk.
  3. Tambahkan nama produk pada senarai.
  4. Dapatkan indeks rawak dalam saiz senarai.
  5. Tambahkan produk pada indeks rawak pada rawakProductList.
<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>

Penyelesaian 2: Pendekatan Nyahnormalisasi

  1. Buat nod baharu yang dipanggil productIds dalam pangkalan data.
  2. Tambahkan kunci untuk setiap ID produk di bawah productId nod.
  3. Soal nod productId untuk mendapatkan ID produk.
  4. Jana indeks rawak dalam bilangan ID produk.
  5. Soal nod produk menggunakan ID produk rawak untuk mendapatkan butiran produk.
<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>

Atas ialah kandungan terperinci Bagaimana untuk Memaparkan Produk Rawak Unik daripada Firebase Tanpa Memuat Turun Semua Data?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn