android - 从不同类别的不同微调器的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) {
}
});
}
解决方案
为什么不为每个微调器制作一个集合?这将是前端检索数据的最快解决方案。但这也可能会影响程序的其他部分。看看创建可扩展的数据
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")
检索类别按钮的产品。而不是从服务器加载所有产品,然后只显示一部分。
推荐阅读
- pandas - 如何修复“工作簿析构函数中捕获的异常。工作簿可能需要显式关闭()。”
- python - 将 mypy 的通用 self 与 python2 类型注释一起使用
- git - 多产品生产中的 Gitflow
- reactjs - 如何在 Tizen 中构建 create-react-app?
- regex - 在字符串正则表达式 ruby 之前和之后提取数字
- r - 使用每个项目的名称从列表创建新列
- c - Linux如何将设备文件与设备驱动程序链接?open() 系统调用最终会调用设备驱动程序代码吗?
- python - 当两个模块都导入另一个模块时,两个模块之间的控制流程如何?
- sql - 在两个 sql 表之间查找更改的数据
- java - 有没有办法使用 java 将 json 格式的参数发送到已安装的 Windows 应用程序?