在不同类别的不同微调器中从 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")
检索类别按钮的产品。而不是从服务器加载所有产品然后只显示一部分。
我正在开发一个电子商务 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")
检索类别按钮的产品。而不是从服务器加载所有产品然后只显示一部分。