【问题标题】:DatabaseException: Can't convert object of type java.lang.Long to type (Model.class)DatabaseException:无法将 java.lang.Long 类型的对象转换为类型(Model.class)
【发布时间】:2020-01-22 13:53:49
【问题描述】:

我正在尝试为 RecyclerView 上设置的 cardView 充气,从 FireBase 获取数据。 我的问题是:

DatabaseException:无法将 java.lang.Long 类型的对象转换为类型 app.technologias8.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

【问题讨论】:

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


    【解决方案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();
            }
        });
    

    【讨论】:

    • 你需要使用一个适配器和一个viewholder,cardview只是一个view,使用FirebaseUI并在xml中添加一个cardview,然后在onCreateViewHolder inflate cardView 的布局,你会得到带有数据的卡片......
    • 现在它发送这个错误:E/RecyclerView: No adapter attach;跳过布局...你知道如何解决吗?
    • 请在另一个问题中提问
    猜你喜欢
    • 2018-05-22
    • 1970-01-01
    • 2018-07-27
    • 2017-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多