如何用Firebase实时数据库数据填充recylerview?

编程入门 行业动态 更新时间:2024-10-12 16:24:07
本文介绍了如何用Firebase实时数据库数据填充recylerview?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我为此尝试了许多解决方案,但是这些都不能解决我的问题.我无法使用recyclerview到达数据库.我有这样的Firebase实时数据库数据;

I tried so many solutions about this, but none of this resolve my problem. I can not reach the database using recyclerview. I have firebase realtime database data like this;

标签---主要类别----- keyID------主要类别,子类别

Tag --- Main Category ----- keyID ------ main-Category, sub-category

标签类

public class Tags { private String id; private String mainTags; private String subTags; public Tags() {} public Tags(String id, String mainTags, String subTags) { this.id = id; this.mainTags = mainTags; this.subTags = subTags; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getMainTags() { return mainTags; } public void setMainTags(String mainTags) { this.mainTags = mainTags; } public String getSubTags() { return subTags; } public void setSubTags(String subTags) { this.subTags = subTags; } }

这是TagAdapter

and this is TagAdapter

public class TagAdapter extends RecyclerView.Adapter<TagAdapter.ItemViewHolder> { private List<Tags> mTagList; private Context mContext; public TagAdapter(List<Tags> mTagList, Context mContext) { this.mTagList = mTagList; this.mContext = mContext; } @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.each_item_tags, parent,false); return new ItemViewHolder(view); } @Override public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { Tags tags = mTagList.get(position); holder.tvTags.setText(tags.getSubTags()); holder.tvMainTags.setText(tags.getMainTags()); } @Override public int getItemCount() { return mTagList.size(); } public class ItemViewHolder extends RecyclerView.ViewHolder{ private TextView tvMainTags, tvTags; public ItemViewHolder(@NonNull View itemView) { super(itemView); tvMainTags = itemView.findViewById(R.id.tvMainTag); tvTags = itemView.findViewById(R.id.tvTags); } } }

TagsFragment

TagsFragment

@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment View view = inflater.inflate(R.layout.fragment_tags, container, false); rvTags = view.findViewById(R.id.rvTags); LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getContext()); linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL); rvTags.setLayoutManager(linearLayoutManager); rvTags.hasFixedSize(); tagAdapter = new TagAdapter(tagsList, getContext()); rvTags.setAdapter(tagAdapter); return view; } private void getTagView(){ FirebaseDatabase firebaseDatabase = FirebaseDatabase.getInstance(); DatabaseReference dbRefTags = firebaseDatabase.getReference().child("Tag"); dbRefTags.addChildEventListener(new ChildEventListener() { @Override public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) { for (DataSnapshot ds : dataSnapshot.getChildren()){ if (ds.exists()) { try { Tags tags = ds.getValue(Tags.class); tagsList.add(tags); }catch (Exception e){ Toast.makeText(getContext(), e.getMessage(), Toast.LENGTH_LONG).show(); } }else { Toast.makeText(getContext(), "Bir hata oluştu", Toast.LENGTH_SHORT).show(); } } tagAdapter.notifyDataSetChanged(); } @Override public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) { } @Override public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) { } @Override public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) { } @Override public void onCancelled(@NonNull DatabaseError databaseError) { } }); }

运行时没有错误显示,但我无法检索数据.而且我还尝试了firebaseRecyclerView.Adapter,在上一个依赖项中,我无法使其正常运行.我不知道这里有什么问题.我该如何解决?

There is no error show up when running but i couldn't be able to retrieve data. And i tried firebaseRecyclerView.Adapter also and in the last dependency, i couldn't make it work. I don't know what is wrong in here. how can i solve this?

推荐答案

获取具有子名称 ds.child("SubTag").getValue()

dbRefTags.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(@NonNull DataSnapshot dataSnapshot) { for (DataSnapshot parentDS : dataSnapshot.getChildren()) { Log.d("Tag:", String.valueOf(parentDS.getKey())); for (DataSnapshot ds : parentDS.getChildren()) { Tags tags = new Tags(); tags.setMainTag(parentDS.getKey()); tags.setSubTag(ds.child("SubTag").getValue().toString()); Log.d("Tag: -> SubTag)", tags.getSubTag()); tagsList.add(tags); } } tagAdapter.notifyDataSetChanged(); } @Override public void onCancelled(@NonNull DatabaseError databaseError) { Toast.makeText(getContext(), databaseError.getMessage(), Toast.LENGTH_SHORT).show(); } });

更多推荐

如何用Firebase实时数据库数据填充recylerview?

本文发布于:2023-10-26 17:45:42,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1530883.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:如何用   实时   数据库   数据   recylerview

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!