【问题标题】:How to check if firebase recylerview has values or it is empty in android?如何检查firebase recylerview是否有值或在android中为空?
【发布时间】:2018-04-18 06:06:03
【问题描述】:

我不喜欢向用户显示空的 RecyclerView。我知道 recyclerview 中有 getItemCount 方法,但我认为 reyclerview 可能是在单独的线程上执行的。这是因为每当我尝试调用 adapter.getitemcount 时,即使我的 recyclerview 将具有来自 firebase 的值,它也会快速给出计数 0。所以我认为可能直到值出现之前 getItemCount 方法执行并返回 0 或者它可能在单独的线程上执行。但无论哪种方式,即使我的 recyclerview 具有来自 firebase 的值,我也会得到 0。所以我想检查我的firebase回收器是否为空,然后相应地更改视图,因为我不喜欢向用户显示和清空recyclerview(一个空的活动)。 请建议我应该如何检查它?顺便说一句,这是我简单的 firebase 适配器代码:

 allFriendsAdapter = new FirebaseRecyclerAdapter<FriendsModel, ViewHolder>(friendsOptions) {
            @Override
            protected void onBindViewHolder(@NonNull final ViewHolder holder, final int position, @NonNull FriendsModel model) {


                  }

                  @Override
                  public void onCancelled(DatabaseError databaseError) {

                  }
              });


 if(allFriendsAdapter .getItemcount==0){ //this is always returning 0 even when my recyclerview has values

}

【问题讨论】:

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


    【解决方案1】:

    只需覆盖onDataChanged 并在那里检查getItemCount()

    【讨论】:

    【解决方案2】:

    您可以使用ValueEventListener 来检查是否存在任何值:

    DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("Users");
    Query queries = ref.orderByChild("name").equalTo(name_here);
    queries.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                if (dataSnapshot.exists()) {
                    Toast.makeText(HomeActivity.this,"data exists",Toast.LENGTH_SHORT).show();
    
                }
                else{
                    Toast.makeText(HomeActivity.this,"No data exists",Toast.LENGTH_SHORT).show();
                }
            }
    
            @Override
            public void onCancelled(DatabaseError databaseError) {
    
            }
        });
    

    在您的适配器中,您需要使用查询才能获取数据,例如上面的查询,它还会检查数据是否存在。

    然后你可以通过构建FirebaseRecyclerOptions来配置适配器:

    FirebaseRecyclerOptions<FriendsModel> friendsOptions =
            new FirebaseRecyclerOptions.Builder<FriendsModel>()
                    .setQuery(queries, FriendsModel.class)
                    .build();
    

    【讨论】:

    • onDataChange 不是异步调用吗??
    • 和这个一样:stackoverflow.com/questions/43959582/… 不同的是这里他用的是firebaserecycleradapter
    • 啊,好吧,我明白了,你使用 .exists 而不是获取数据,我的错
    • @PeterHaddad 感谢您的回答,我已经在我的 firebase 回收器适配器中使用查询,我只是没有在此处提及任何机密代码。无论如何,所以你的意思是我应该首先检查该查询是否存在?所以基本上首先将侦听器附加到该查询,然后如果存在快照,则应在其中编写适配器代码,对吗?
    • 是的,保持原样,但是在适配器代码使用上面的代码检查数据是否存在之前,不要在侦听器中编写适配器代码..
    猜你喜欢
    • 2023-03-30
    • 1970-01-01
    • 2014-08-05
    • 2017-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-28
    相关资源
    最近更新 更多