数据不会从firebase进入我的应用程序

时间:2018-05-09 08:09:54

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

我尝试将图片和名称从Firebase数据库加载到RecyclerView中的应用程序,但是当我运行它时,它没有显示图像和名称而没有错误,这是我的代码。

  //Load menu
    recycler_menu=(RecyclerView)findViewById(R.id.recycler_menu);
    recycler_menu.setHasFixedSize(true);
    layoutManager= new LinearLayoutManager(this);
    recycler_menu.setLayoutManager(layoutManager);
    loadMenu();

}
  private void loadMenu(){
      FirebaseRecyclerOptions<Category> options = new FirebaseRecyclerOptions.Builder<Category>().setQuery(category, Category.class).build();
          FirebaseRecyclerAdapter<Category, MenuViewHolder> adapter= new FirebaseRecyclerAdapter<Category, MenuViewHolder>(options){
              @Override
              public MenuViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
                  View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.menu_item, parent, false);

                  MenuViewHolder viewHolder = new MenuViewHolder(view);

                  return viewHolder;
              }
           @Override
           protected void onBindViewHolder(MenuViewHolder holder, int position, Category model) {
               holder.txtMenuName.setText(model.getName());
               Picasso.with(getBaseContext()).load(model.getImage()).into(holder.imageView);
           }
           };
       recycler_menu.setAdapter(adapter);
   }

我的代码运行正常,但图片和名称未显示,显示空白活动。请帮忙。

2 个答案:

答案 0 :(得分:1)

只需在adapter.startListening()中添加OnStart即可启动数据监听器,并在adapter.stopListening()中添加onStop以通过这种方式停止:

@Override
protected void onStart() {
    super.onStart();
    adapter.startListening();
}

@Override
protected void onStop() {
    super.onStop();
    adapter.stopListening();
}

答案 1 :(得分:0)

这是使用Firebase作为数据库时通常会遇到的主要问题之一。我无法看到您检索数据的位置,但问题很可能是Firebase事件侦听器异步工作。换句话说,您的方法返回之前检索数据。在我的项目中,我通过检索 onCreateView onCreate 上的数据解决了这个问题,然后在其他方法中使用这些值。如果不是这样的话,我只是简单地在事件监听器中完成工作,如果必须的话(它将使你的代码看起来非常复杂和不可读)。如果您对Firebase及其异步工作方式进行更多研究,将会更有帮助。

如果您以某种方式找到更好的解决方法,请在下方发表评论,以便我也可以使用它。我仍在寻求更好的方式。