Java 来自Firebase的数据未显示在RecyclerView中

Java 来自Firebase的数据未显示在RecyclerView中,java,android,firebase,firebase-realtime-database,android-recyclerview,Java,Android,Firebase,Firebase Realtime Database,Android Recyclerview,MyRecyclerView不显示来自Firebase的任何数据。我在logcat没有看到任何错误,所以我不知道为什么。我跟着录像带上的指南走。但还是什么都没有。我使用的是安卓8.0和API 27。希望有人能帮忙 我的主要活动代码: public class ViewProduct extends AppCompatActivity { DatabaseReference ref; ArrayList<Model> list; private RecyclerView

My
RecyclerView
不显示来自Firebase的任何数据。我在logcat没有看到任何错误,所以我不知道为什么。我跟着录像带上的指南走。但还是什么都没有。我使用的是安卓8.0和API 27。希望有人能帮忙

我的主要活动代码:

public class ViewProduct extends AppCompatActivity {

  DatabaseReference ref;
  ArrayList<Model> list;
  private RecyclerView recyclerView;
  private RecyclerView.Adapter viewHolder;
  private RecyclerView.LayoutManager layoutManager;
  SearchView searchView;



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_view_product)  ;

        ref = FirebaseDatabase.getInstance().getReference().child("buddymealplanneruser").
                child("Products");


        recyclerView = findViewById(R.id.stallproductRecyclerView);
        //recyclerView.setHasFixedSize(true);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));

        //SEARCH VIEW
        searchView = findViewById(R.id.searchProductStall);

        //ADAPTER
        list = new ArrayList<>();
        viewHolder = new ViewHolder(list);
        recyclerView.setAdapter(viewHolder);



    }

    @Override
    protected void onRestart() {
        super.onRestart();
        if (ref!=null)
        {
             ref.addValueEventListener(new ValueEventListener() {
                 @Override
                 public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                     if (dataSnapshot.exists())
                     {
                         //list = new ArrayList<>();
                         list.clear();
                         for(DataSnapshot ds : dataSnapshot.getChildren())
                         {

                             list.add(ds.getValue(Model.class));

                         }
                         //ViewHolder viewHolder = new ViewHolder(list);
                         //recyclerView.setAdapter(viewHolder);

                         viewHolder.notifyDataSetChanged();

                     }
                 }

                 @Override
                 public void onCancelled(@NonNull DatabaseError databaseError) {
                     Toast.makeText(ViewProduct.this, databaseError.getMessage(),
                             Toast.LENGTH_SHORT).show();
                 }
             });
        }
        if (searchView !=null)
        {
            searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
                @Override
                public boolean onQueryTextSubmit(String s)
                {
                    return false;
                }

                @Override
                public boolean onQueryTextChange(String s) {
                    search(s);
                    return true;
                }
            });
        }
    }

    private void search(String str) {
        ArrayList<Model> myList = new ArrayList<>();
        for(Model object : list)
        {
            if(object.getProductName().toLowerCase().contains(str.toLowerCase()))
            {
                myList.add(object);
            }
        }
        ViewHolder viewHolder = new ViewHolder(myList);
        recyclerView.setAdapter(viewHolder);


    }


}

我的firebase和我的应用程序的屏幕截图


我不认为您正在填充列表,您发送的是空的。从我看到的情况来看,只有在重新启动活动时才能将项目添加到列表中。在发送列表之前,请尝试填充列表,或者将onRestart()更改为onStart()onResume(),我认为您没有填充列表,您发送的列表是空的。从我看到的情况来看,只有在重新启动活动时才能将项目添加到列表中。尝试在发送列表之前填充它,或者根据您的评论更改onStart()onResume()onRestart()


是的BuddymalPlanner是我项目的名字

请注意,无需在引用中添加项目的子项目名称。因此,请更改以下代码行:

ref = FirebaseDatabase.getInstance().getReference().child("buddymealplanneruser").
            child("Products");
只是为了:

ref = FirebaseDatabase.getInstance().getReference().child("Products");

根据你的评论:


是的BuddymalPlanner是我项目的名字

请注意,无需在引用中添加项目的子项目名称。因此,请更改以下代码行:

ref = FirebaseDatabase.getInstance().getReference().child("buddymealplanneruser").
            child("Products");
只是为了:

ref = FirebaseDatabase.getInstance().getReference().child("Products");

将代码放在onRestart()中,放在onResume()中,而不是放在headupdate中:同样,my recyclerview
BuddymalPlannerUser中没有显示任何内容。您的项目名称是什么?请同时回复@AlexMamoyes,BuddymalPlanner是我的项目名称(回复@AlexMamo)将您的代码放在onRestart()中,而不是onResume()中更新:同样,my recyclerview
BuddymalPlanner中没有显示任何内容用户是您的项目名称吗?还请回复@AlexMamoyes,BuddymalPlanner是我的项目名称(回复@AlexMamo)谢谢,并注意到我将尝试使用onStart(),因为我已经尝试使用onResume(),但仍然相同。更新:sameI刚刚检查了你链接的视频,他覆盖的方法实际上是onStart()。我认为问题是你仍然发送空列表。试着完全按照视频上说的去做。由于某些原因,适配器可能无法获取新数据。非常感谢。我现在就做。感谢您尝试帮助我。谢谢,并注意到我将尝试使用onStart(),因为我已经尝试使用onResume(),但仍然相同。更新:sameI刚刚检查了你链接的视频,他覆盖的方法实际上是onStart()。我认为问题是你仍然发送空列表。试着完全按照视频上说的去做。由于某些原因,适配器可能无法获取新数据。非常感谢。我现在就做。谢谢你帮我摆脱困境哦,我的上帝,非常感谢你,现在一切都好了。非常感谢你,先生。你救了我的天啊,太感谢你了,一切都修好了。非常感谢你,先生。你救了我一天