从Firebase在RecyclerView中显示数据:错误:无法将类型为java.lang.String的对象转换为

问题描述 投票:0回答:2

我正在尝试将我的Firebase表/列表的内容称为“资产”显示到回收者视图中。但我收到一条错误消息:

com.google.firebase.database.DatabaseException:无法将java.lang.String类型的对象转换为com.example.zakatone.Assets类型

我试图查看所有关联的类,但是找不到错误。

这是我的数据在Firebase中的外观:

Database screenshot

Assets.java

package com.example.zakatone;

public class Assets {
private String assetname;
private String assetamount;

public Assets() {
}


public String getAssetname() {
    return assetname;
}

public void setAssetname(String assetname) {
    this.assetname = assetname;
}

public String getAssetamount() {
    return assetamount;
}

public void setAssetamount(String assetamount) {
    this.assetamount = assetamount;
}


}

MyAdapter.java

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {

private Context context;
private ArrayList<Assets> assets;

MyAdapter(Context c, ArrayList<Assets> a)
{
    context = c;
    assets = a;
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    return new MyViewHolder(LayoutInflater.from(context).inflate(R.layout.cardview,parent, false));
}

@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
    holder.name.setText(assets.get(position).getAssetname());
    holder.amount.setText(assets.get(position).getAssetamount());

}

@Override
public int getItemCount() {
    return assets.size();
}

class MyViewHolder extends RecyclerView.ViewHolder{

    TextView name, amount;
    public MyViewHolder(@NonNull View itemView) {
        super(itemView);
        name = itemView.findViewById(R.id.name);
        amount = itemView.findViewById(R.id.amount);
    }
}

}

这是我要显示数据的位置:overview.java

reference = FirebaseDatabase.getInstance().getReference().child("Assets");
    recyclerView = findViewById(R.id.myRecycler);
    recyclerView.setLayoutManager(new LinearLayoutManager(this));


    reference = FirebaseDatabase.getInstance().getReference().child("Assets");
    reference.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                list = new ArrayList<Assets>();
                for(DataSnapshot dataSnapshot1: dataSnapshot.getChildren()){
                    Assets a = dataSnapshot1.getValue(Assets.class);
                    list.add(a);
                }
                adapter = new MyAdapter(overview.this,list);
                recyclerView.setAdapter(adapter);
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {
            Toast.makeText(overview.this, "Something Fishy", Toast.LENGTH_SHORT).show();
        }
    });

我想以这种方式显示数据:enter image description here

我在以下行的overview.java类中出错:

Assets a = dataSnapshot1.getValue(Assets.class);

[请帮助我,因为当前概述页面上没有任何显示。我假设访问数据库表时出错,但是我不确定。

android firebase firebase-realtime-database android-recyclerview recycler-adapter
2个回答
0
投票

首先,您有两个字段assetNameassetAmount。在Java中,始终使用camelCase,第一个单词小写,第二个单词以大写字母开头。

由于具有这两个字段,因此还需要在数据库中包含它们,以便能够将对象映射到数据库。因此,保存时需要将结构更改为以下内容:

Assets
   randomId
       assetName : name
       assetAmount : amt
   randomId
       assetName : name
       assetAmount : amt

检索节点Assets时,请不要使用for循环进行迭代,因为您将检索类型为String而不是类型为Assets的值


0
投票

尝试这样编辑

((Assets) getActivity()).getValue;
© www.soinside.com 2019 - 2024. All rights reserved.