java - 无法将数据从 FireBase 加载到 Recycler View 中

标签 java android firebase android-recyclerview

我正在尝试通过从 FireBase 加载数据来制作 Recycler View 列表 enter image description here

为此我制作了 MainList.java

public class MainList {
private String imageResourceId;
private String name;

public MainList() {}


public MainList(String imageResourceId, String name){
    this.imageResourceId = imageResourceId;
    this.name = name;
}

public String getImageResourceId() { return imageResourceId; }

public String getName(){ return name;}

和 MainListAdapter

public class MainListAdapter extends RecyclerView.Adapter<MainListAdapter.MainListViewHolder>{

ImageView item_image;

List<MainList> mMainList;
LayoutInflater inflater;

class MainListViewHolder extends RecyclerView.ViewHolder {

    TextView item_name;
    ImageView item_image;

    MainListAdapter mAdapter;

    public MainListViewHolder(View itemView, MainListAdapter adapter) {
        super(itemView);

        item_name = itemView.findViewById(R.id.item_name);
        item_image = itemView.findViewById(R.id.item_image);
        this.mAdapter = adapter;
    }
}

public MainListAdapter(Context context, List<MainList> main_list){
    inflater = LayoutInflater.from(context);
    this.mMainList = main_list;
}

@NonNull
@Override
public MainListViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View mItemView = inflater.inflate(R.layout.list_item, parent, false);
    return new MainListViewHolder(mItemView, this);
}

@Override
public void onBindViewHolder(@NonNull MainListViewHolder holder, int position) {
    MainList mainList = mMainList.get(position);
    holder.item_name.setText(mainList.getName());
    Picasso.get().load(mainList.getImageResourceId()).into(item_image);
    //holder.item_image.setImageResource(mainList.getImageResourceId());
}

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

} 我尝试在 OnBindViewHolder 中使用 Picasso 作为我的图像

在 MainActivity 中,我尝试从 FireBase 获取数据以填充我的列表

main_comics_List = new ArrayList<>();

    mRef = FirebaseDatabase.getInstance().getReference().child("ComicsData").child("AllComicses");
    mRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()){
                MainList item_of = dataSnapshot1.getValue(MainList.class);
                main_comics_List.add(item_of);
            }
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });

但是当我启动我的应用程序时,我的 Recycler 位置没有任何显示,我得到了消息

enter image description here

我做错了什么?我该如何解决? 如果您能回答我,我将不胜感激。

最佳答案

MainList 类中的实例变量应该与数据库中的属性相同。因此在 MainList 中添加以下内容:

private String imageLink;
private String title;

还有 setter 和 getter:

public String getImageLink() { return imageLink; }

public String getTitle(){ return title;}

public void setImageLink(String imageLink) { this.imageLink = imageLink; }

public void setTitle(String title){ this.title = title;}

此外,在您的数据库中,您似乎没有使用 nameimageResourceId,因此您可以将它们从类 MainList 中删除。

关于java - 无法将数据从 FireBase 加载到 Recycler View 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59019809/

相关文章:

java - 将 Azure 连接到 Android Studio

java - 如何修复使用 lambda 和条件从列表中删除重复项

android - 图像到整数

java - 为什么我会收到未经检查的作业警告?

java - map.containsKey(key) 返回 true,但 map.get(key) 不返回任何内容

javame - 下载并保存 mp3 文件

java - 打印两个 int 数组中的公共(public)元素而不重复 [初学者]

java - 禁用按钮后刷新整数值

angular - 检索新创建的用户 Firebase 的 ID

firebase - 每次使用 Flutter/Firebase 按下上传时,如何创建唯一的图像 ID?