Firebase 노드에서 고유한 무작위 제품을 검색하는 방법은 무엇입니까?
Firebase는 유연한 데이터 구조를 제공하므로 데이터를 계층적 방식으로 저장할 수 있습니다. 일부 시나리오에서는 방대한 수의 레코드가 있을 수 있지만 고유한 임의 레코드는 하나만 필요합니다. 이 문서에서는 Node Firebase에서 이를 달성하기 위한 두 가지 접근 방식을 안내합니다.
기본 접근 방식: 모든 레코드 다운로드
데이터베이스 구조가 다음과 유사하다고 가정합니다.
Firebase-root | --- products | --- productIdOne | | | --- name: "gjwj" | | | --- category: "hreggrrg" | | | --- location: "vjhiwehifwe" | | | --- price: 44 | | | --- color: "fassaf" | --- productIdTwo | | | --- name: "uygfwh" | | | --- category: "hhhjwwwom" | | | --- location: "pervrr" | | | --- price: 33 | | | --- color: "yrtrr" | --- //And so on
임의의 제품을 검색하려면 다음 코드를 구현할 수 있습니다.
var listView = (ListView) findViewById(R.id.list_view);
var arrayAdapter = new ArrayAdapter(context, android.R.layout.simple_list_item_1, randomProductList);
listView.setAdapter(arrayAdapter);
var rootRef = FirebaseDatabase.getInstance().getReference();
var productsRef = rootRef.child("products");
var valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
var productList = new ArrayList();
for(var ds : dataSnapshot.getChildren()) {
var name = ds.child("name").getValue(String.class);
productList.add(name);
}
var productListSize = productList.size();
var randomProductList = new ArrayList();
randomProductList.add(new Random().nextInt(productListSize));
arrayAdapter.notifyDatasetChanged();
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.d(TAG, "Error: ", task.getException()); //Don't ignore errors!
}
};
productsRef.addListenerForSingleValueEvent(valueEventListener);
모든 제품을 반복하여 목록을 생성하고 해당 목록 내에서 선택한 제품을 나타내는 임의의 인덱스를 생성할 수 있습니다.
최적화됨 접근 방식: 전체 기록 다운로드 방지
데이터 검색을 최소화하려면 다음과 같이 데이터베이스를 재구성할 수 있습니다. 다음은 다음과 같습니다.
Firebase-root | --- products | | | --- productIdOne | | | | | --- //details | | | --- productIdTwo | | | --- //details | --- productIds | --- productIdOne: true | --- productIdTwo: true | --- //And so on
여기서 제품 ID만 포함하는 productIds라는 별도의 노드를 만듭니다. 임의의 제품을 검색하려면:
var rootRef = FirebaseDatabase.getInstance().getReference();
var productIdsRef = rootRef.child("productIds");
var valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
var productIdsList = new ArrayList();
for(var ds : dataSnapshot.getChildren()) {
var productId = ds.getKey();
productIdsList.add(productId);
}
var productListSize = productList.size();
var randomProductList = new ArrayList(););
var productIdRef = rootRef.child("products").child(productIdsList.get(new Random().nextInt(int productListSize));
var eventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
var name = dataSnapshot.child("name").getValue(String.class);
Log.d("TAG", name);
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.d(TAG, "Error: ", task.getException());
}
};
productIdRef.addListenerForSingleValueEvent(eventListener);
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.d(TAG, "Error: ", task.getException());
}
};
productIdsRef.addListenerForSingleValueEvent(valueEventListener);
먼저 제품 ID를 검색하면 특정 제품에 대해 쿼리할 수 있으므로 보다 효율적이고 대상이 명확한 검색 프로세스가 가능해집니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3