Исключение DatabaseException: не удается преобразовать объект типа java.lang.Длинный для ввода (Model.class )

#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. Пожалуйста, задайте это в другом вопросе