首页 > Java > java教程 > 如何在不下载所有数据的情况下显示 Firebase 中的独特随机产品?

如何在不下载所有数据的情况下显示 Firebase 中的独特随机产品?

Susan Sarandon
发布: 2024-10-27 22:27:02
原创
1106 人浏览过

 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. 将 child("products") 添加到引用中以定位数据库中的正确节点。
  2. 迭代产品节点的所有子节点。
  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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板