Неправильное извлечение значения из базы данных - PullRequest
0 голосов
/ 28 сентября 2018

У меня проблема с получением значения в Firebase.Я добавил TextView, чтобы увидеть значение внутри снимка данных, и я вижу его правильно, но когда я добавляю его в мой 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 голосов
/ 29 сентября 2018

То, что вы получаете в вашем LisView, это в основном строковое представление вашего Product объекта.Итак, следующая строка:

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

Thirt oneбудет создать пользовательский адаптер.Таким образом, даже если вы передаете весь объект Product в адаптер, вы можете получить только description и qty внутри адаптера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...