在Node Firebase 中取得唯一的隨機產品
要從超過1000 筆記錄的節點資料庫中擷取單一隨機產品,請考慮兩種方法:經典解決方案和非規範化方法。
經典解決方案
<br>ListView listView = (ListView) findViewById(R.id.list_view);<br>ArrayAdapter arrayAdter (context, android.R.layout.simple_list_item_1, randomProductList);<br>listView.setAdapter(arrayAdapter);<br>DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference(); child("products"); // 新增了對.child("products")<br>ValueEventListener valueEventListener = new ValueEventListener() {<br><pre class="brush:php;toolbar:false">@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 arrayAdapter.notifyDatasetChanged(); } @Override public void onCancelled(DatabaseError databaseError) { Log.d(TAG, "Error: ", task.getException()); //Don't ignore errors! }
productsv ;
pre>
非規範化方法
建立一個單獨的「productIds」節點以避免下載大量資料:<p>Firebase-root-root <br> |<br> --- products<br> | |<br> | ---productIdOne<br> | | |<br> | | --- //詳細資料<br> |<br> | ---productIdTwo<br> | |<br> | --- //詳細資料<br> | <br> --- ProductIds<br></p><pre class="brush:php;toolbar:false"> | --- productIdOne: true | --- productIdTwo: true | --- //And so on
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();<pre class="brush:php;toolbar:false">@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(); List<String> randomProductList = new ArrayList<>(); DatabaseReference productIdRef = rootRef.child("products").child(productIdsList.get(new Random().nextInt(int productListSize)); ValueEventListener eventListener = new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { String name = dataSnapshot.child("name").getValue(String.class); Log.d("TAG", 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);
pre>
此方法查詢「productIds」節點以取得隨機產品ID,然後以「products」節點查詢以「productIds」節點查詢隨機產品獲取具體詳細資訊。
以上是如何在 Node 中從大型 Firebase 資料庫中有效地選擇隨機產品?的詳細內容。更多資訊請關注PHP中文網其他相關文章!