Mendapatkan Produk Rawak Unik dalam Node Firebase
Untuk mendapatkan semula produk rawak tunggal daripada pangkalan data nod melebihi 1000 rekod, pertimbangkan dua pendekatan: penyelesaian klasik dan pendekatan tidak normal.
Penyelesaian Klasik
ListView listView = (ListView) findViewById(R.id.list_view);
ArrayAdapter arrayAdapter = ArrayAdapter baharu<>(context, android.R.layout.simple_list_item_1, randomProductList);
listView.setAdapter(arrayAdapter);
DatabaseReference rootRef = FirebaseDatabase.get
DatabaseReference productsRef = rootRef.child("products"); //Menambahkan panggilan ke .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 arrayAdapter.notifyDatasetChanged(); } @Override public void onCancelled(DatabaseError databaseError) { Log.d(TAG, "Error: ", task.getException()); //Don't ignore errors! }
};
productsRef.addListenerForSingleValueEvent(value
);< pra>
Pendekatan ini berpusing melalui semua nod produk, menambahkan nama mereka pada senarai dan memilih satu secara rawak.
Pendekatan Tidak Normal
Buat pisahkan nod "productIds" untuk mengelakkan memuat turun sejumlah besar data:
<br>Firebase-root<br> |<br> --- produk<br> | |<br> | --- productIdOne<br> | | |<br> | | --- //butiran<br> | |<br> | --- productIdTwo<br> | |<br> | --- //butiran<br> | <br> --- productIds</p> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false"> | --- productIdOne: true | --- productIdTwo: true | --- //And so on
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
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(); 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.addListenerForSingleVa);&🎜 pra>
Atas ialah kandungan terperinci Bagaimana untuk Memilih Produk Rawak dengan Cekap daripada Pangkalan Data Firebase Besar dalam Node?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!