首页 > 解决方案 > 从不同类别的不同微调器的firebase中检索数据

问题描述

我正在开发一个电子商务 android 应用程序,我正在使用 Firebase 实时数据库。我有不同类别的产品(例如纽扣、鞋带、礼服等)属于名为“礼服”的微调器,依此类推。到目前为止,我所做的是在一个微调器中展示我的所有产品。现在我想做如上所述的事情。这是我到目前为止所做的代码。 这是我的数据库的外观。

 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) {

        }
    });
}

标签: androidfirebasefirebase-realtime-databaseandroid-spinner

解决方案


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

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));
  }
}

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

火库

更改为 Firestore migth 也值得考虑。然后你可以做类似的事情

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

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


推荐阅读