Firebase检索值不正确

时间:2018-09-28 05:42:09

标签: java android firebase listview firebase-realtime-database

我在检索Firebase中的值时遇到问题。我添加了TextView来查看数据快照中的值,并且Im正确地看到了它,但是当Im在我的ListView中添加它时,它看起来像这样。顺便说一句,我的ListView是绿色的。

enter image description here

在我的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(){}

}

1 个答案:

答案 0 :(得分:0)

您在LisView中得到的基本上是Product对象的String表示形式。所以下面的字符串:

 com.example.mark.mobilethesis.Product@e8e0966

实际上表示内存中Product对象的地址,这当然不是您想要的。要同时显示两个数据,descriptionqty有三个选项。

第一个也是最简单的一个方法是覆盖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对象传递给适配器,也只能在适配器内部获得descriptionqty