> Java > java지도 시간 > 본문

모든 데이터를 다운로드하지 않고 Firebase에서 고유한 무작위 제품을 표시하는 방법은 무엇입니까?

Susan Sarandon
풀어 주다: 2024-10-27 22:27:02
원래의
970명이 탐색했습니다.

 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. 데이터베이스의 올바른 노드를 대상으로 지정하려면 참조에 하위("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에 대한 키를 추가합니다. node.
  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으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!