代码之家  ›  专栏  ›  技术社区  ›  Sheikh Hasib

FirebaseRecyclerAdapter无法从Firebase数据库检索数据

  •  2
  • Sheikh Hasib  · 技术社区  · 8 年前

    我正在尝试在我的主活动(主页)上显示博客文章。但主页没有显示我的意思是主页是空的。

    FireBase数据库结构:

    enter image description here

    主要活动:

    public class MainActivity extends AppCompatActivity {
        private static final String TAG = "MainActivity";
        private RecyclerView mBlogList;
        private DatabaseReference mDataRef;
        private FirebaseRecyclerAdapter<BlogInfo, ViewHolder> adapter;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            Log.d(TAG, "onCreate: started!");
            mDataRef = FirebaseDatabase.getInstance().getReference().child("BlogApp").child("Posts");
            mBlogList = findViewById(R.id.blogListId);
            mBlogList.setHasFixedSize(true);
            mBlogList.setLayoutManager(new LinearLayoutManager(this));
    
            FirebaseRecyclerOptions<BlogInfo> options = new FirebaseRecyclerOptions.Builder<BlogInfo>()
                    .setQuery(mDataRef, BlogInfo.class).build();
    
            adapter = new FirebaseRecyclerAdapter<BlogInfo, ViewHolder>(options) {
                @Override
                protected void onBindViewHolder(@NonNull ViewHolder holder, int position, @NonNull BlogInfo model) {
    
                    String imgUrl = model.getImage();
                    Picasso.get().load(imgUrl).into(holder.post_image);
                    holder.post_title.setText(model.getTitle());
                    holder.post_desc.setText(model.getDescription());
    
                }
    
                @NonNull
                @Override
                public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
                    Log.d(TAG, "onCreateViewHolder: initialized!");
                    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.single_blog_item, parent, false);
                    ViewHolder holder = new ViewHolder(view);
                    return holder;
                }
            };
            mBlogList.setAdapter(adapter);
    
        }
    
        @Override
        protected void onStart() {
            super.onStart();
            adapter.startListening();
            Log.d(TAG, "onStart: init");
        }
    
        @Override
        protected void onStop() {
            super.onStop();
            adapter.stopListening();
            Log.d(TAG, "onStop: stop Blog list");
        }
    
        // ViewHolder Class
        public static class ViewHolder extends RecyclerView.ViewHolder{
            private static final String TAG = "ViewHolder";
            TextView post_title;
            TextView post_desc;
            ImageView post_image;
    
            ViewHolder(View itemView) {
                super(itemView);
                Log.d(TAG, "ViewHolder: Initialized!");
                post_title = itemView.findViewById(R.id.postTitleId);
                post_desc = itemView.findViewById(R.id.postDescId);
                post_image = itemView.findViewById(R.id.postImageId);
            }
        }
    }
    

    博客信息类:

    public class BlogInfo {
        private String description;
        private String image;
        private String title;
    
        public BlogInfo() {}
    
        public BlogInfo(String title, String description, String image) {
            this.title = title;
            this.description = description;
            this.image = image;
        }
    
        public String getTitle() {return title;}
    
        public void setTitle(String title) {this.title = title;}
    
        public String getDescription() {return description;}
    
        public void setDescription(String description) {this.description = description;}
    
        public String getImage() {return image;}
    
        public void setImage(String image) {this.image = image;}
    }
    

    这是我第一次尝试使用 FirebaseRecyclerAdapter 从firebase数据库检索数据。但我不知道问题在哪里。我也试过调试,但编译器无法进入 onCreateViewHolder 或 onBindViewHolder 功能。但我完全听懂了 FirebaseUI for Realtime Database 参考资料。

    1 回复  |  直到 8 年前
        1
  •  2
  •   Alex Mamo    8 年前

    要解决此问题,需要删除以下代码行:

    mBlogList.setHasFixedSize(true);
    

    只有当你想要 RecyclerView 有固定的尺寸。在你的情况下是没有必要的。

    推荐文章