我在检索Firebase中的值时遇到问题。我添加了TextView
来查看数据快照中的值,并且Im正确地看到了它,但是当Im在我的ListView
中添加它时,它看起来像这样。顺便说一句,我的ListView
是绿色的。
在我的TextView
中,该值是正确的,但在我的列表视图中,其值是这样的。这是我获取值的代码。
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference ref = database.getReference();
ref.child("Sold").child("Item").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
try {
Iterable<DataSnapshot> children = dataSnapshot.getChildren();
//textView.setText(dataSnapshot.getValue().toString());
for (DataSnapshot child : children) {
Product value = child.getValue(Product.class);
products.add(value);
textView.setText(value.getDescription() + " - " + child.getValue());
}
productAdapter.notifyDataSetChanged();
}catch (Exception e)
{
textView.setText(e.getMessage());
}
}
productAdapter = new ArrayAdapter<Product>(getApplicationContext(),
android.R.layout.simple_list_item_1, products);
listViewProducts.setAdapter(productAdapter);
这是我的产品类别
class Product {
private String Description;
private int Qty;
public String getDescription() {
return Description;
}
public void setDescription(String description) {
Description = description;
}
public int getQty() {
return Qty;
}
public void setQty(int qty) {
Qty = qty;
}
public Product(String description, int qty) {
Description = description;
Qty = qty;
}
public Product(){}
}
答案 0 :(得分:0)
您在LisView
中得到的基本上是Product
对象的String表示形式。所以下面的字符串:
com.example.mark.mobilethesis.Product@e8e0966
实际上表示内存中Product
对象的地址,这当然不是您想要的。要同时显示两个数据,description
和qty
有三个选项。
第一个也是最简单的一个方法是覆盖toString()
类中的Product
方法,其他用户也建议这样做。看起来应该像这样:
@Override
public String toString() {
return description + " / " + qty;
}
第二个选择是像这样将列表的类型从Product
更改为String
:
for (DataSnapshot child : children) {
List<String> products = new ArrayList<>();
Product value = child.getValue(Product.class);
products.add(value.getDescription() + " / " + child.getValue());
}
ArrayAdapter<String> productAdapter = new ArrayAdapter<String>(
getApplicationContext(),
android.R.layout.simple_list_item_1,
products
);
listViewProducts.setAdapter(productAdapter);
渴了的是创建一个自定义适配器。因此,即使将整个Product
对象传递给适配器,也只能在适配器内部获得description
和qty
。