#java #android #firebase #firebase-realtime-database #android-recyclerview
#java #Android #firebase #firebase-realtime-database #android-recyclerview
Вопрос:
Я пытаюсь увеличить набор CardView в RecyclerView, беря данные из FireBase. Моя проблема в том:
Исключение DatabaseException: не удается преобразовать объект типа java.lang.Долго вводить app.technologies 8.smartbarprototipo.modelos.Pedido
Итак, они говорят мне, что проблема в
Pedido p = dataSnapshot1.getValue(Pedido.class);
Мой код:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.articulos_seleccionados);
refMesaVirtual.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
listaPedido = new ArrayList<Pedido>();
for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()) {
Pedido p = dataSnapshot1.getValue(Pedido.class); //!!
listaPedido.add(p);
}
adaptadorListarPedidos = new AdaptadorListarPedidos(ArticulosSeleccionadosActivity.this, listaPedido/*, nombre, precio*/);
recyclerViewPedidos.setAdapter(adaptadorListarPedidos);
recyclerViewPedidos.setHasFixedSize(true);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Toast.makeText(ArticulosSeleccionadosActivity.this, "Upss.. Algo anda mal!", Toast.LENGTH_SHORT).show();
}
});
}
}
Моя модель
public class Pedido {
private String Nombre;
private String Precio;
public Pedido() {
}
public Pedido(String nombre, String precio) {
Nombre = nombre;
Precio = precio;
}
public String getNombre() {
return Nombre;
}
public void setNombre(String nombre) {
this.Nombre = nombre;
}
public String getPrecio() {
return Precio;
}
public void setPrecio(String precio) {
this.Precio = precio;
}
}
And my DataBase
![enter image description here][1]
[1]: https://i.stack.imgur.com/Nmt0l.png
Ответ №1:
Поскольку вы используете свой собственный пользовательский класс, тогда нет необходимости выполнять итерации для извлечения данных. При выполнении итерации вы извлекаете некоторые данные типа Long
, поэтому вы получаете эту ошибку. Чтобы решить вашу проблему, вам необходимо удалить цикл for:
refMesaVirtual.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
listaPedido = new ArrayList<Pedido>();
Pedido p = dataSnapshot.getValue(Pedido.class); //!!
listaPedido.add(p);
adaptadorListarPedidos = new AdaptadorListarPedidos(ArticulosSeleccionadosActivity.this, listaPedido/*, nombre, precio*/);
recyclerViewPedidos.setAdapter(adaptadorListarPedidos);
recyclerViewPedidos.setHasFixedSize(true);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Toast.makeText(ArticulosSeleccionadosActivity.this, "Upss.. Algo anda mal!", Toast.LENGTH_SHORT).show();
}
});
Комментарии:
1. вам нужно использовать адаптер и viewholder,
cardview
это простоview
, используйтеFirebaseUI
и в xml добавьтеcardview
, затем вonCreateViewHolder
раздуйте макетcardView
, и вы получите карточки с данными…2. Теперь он отправляет эту ошибку: E / RecyclerView: адаптер не подключен; пропуск макета… вы знаете, как это исправить?
3. Пожалуйста, задайте это в другом вопросе