在不同类别的不同微调器中从 firebase 检索数据

Retrieving data from firebase in different spinners of different categories

我正在开发一个电子商务 android 应用程序,我正在使用 Firebase 实时数据库。我有不同类别的产品(例如纽扣、花边、礼服等)我想根据它们的类别在不同的微调器中显示我的产品,例如我数据库中的所有按钮都位于名为 'buttons' 的微调器下,所有礼服都在我的数据库位于名为 'gowns' 的微调器下,依此类推。到目前为止我所做的是在一个微调器中展示我所有的产品。现在我想按照上面的解释去做。这是我到目前为止所做的代码。 Here is the look of my database.

 private Spinner spinner;
private DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference();
private ArrayList<String> arrayList = new ArrayList<>();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_customization);

    spinner = (Spinner) findViewById(R.id.spinner);
    showDataSpinner();
}

private void showDataSpinner()
{
    databaseReference.child("Products").addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot)
        {
            arrayList.clear();
            for(DataSnapshot item : dataSnapshot.getChildren())
            {
                arrayList.add(item.child("pname").getValue(String.class));
            }
            ArrayAdapter<String> arrayAdapter = new ArrayAdapter<>(CustomizationActivity.this, R.layout.style_spinner, arrayList);
            spinner.setAdapter(arrayAdapter);

        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });
}

你为什么不为每个微调器制作一个集合?这将是前端检索数据的最快解决方案。但这也可能会影响程序的其他部分。看看Create data that scales

databaseReference.child("Products")

变成

databaseReference.child("ProductsOfCategoryGowns")

databaseReference.child("ProductsOfCategoryButtons")

一个简单的次优解

对当前代码最简单的更改是在 for 循环中添加类似 if 语句的内容。

for(DataSnapshot item : dataSnapshot.getChildren())
{
  if(item.child("category").getValue(String.class) === 'Buttons") {
    arrayList.add(item.child("pname").getValue(String.class));
  }
}

其中“按钮”是 category 属性 的请求值。

Firestore

改用 Firestore migth 也值得考虑。然后你可以做一些像

db.collection("Products").where("category", "==", "Buttons") 

检索类别按钮的产品。而不是从服务器加载所有产品然后只显示一部分。