当前位置: 首页 > 知识库问答 >
问题:

如何从Firebase获取数据并将其显示在一个RecyclerView中?[副本]

华章横
2023-03-14

我开发了一个聊天应用程序。我试图从firebase数据库中获取数据,并将其显示在一个recyclerview中,但这并不起作用。我在谷歌上搜索了它,我试了很多选项,但它什么都显示不出来。我做错了什么?这些活动是:

1.主活动(我想在哪里显示数据)

public class SearchActivity extends AppCompatActivity {
Toolbar sToolbar;
SearchView searchView;
RecyclerView recyclerView;
BottomNavigationView sBnv;
SearchAdapter searchAdapter;
LinearLayoutManager llm;
ArrayList<String> arrayList;
User user;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_search);

    sToolbar = findViewById(R.id.sToolbar);
    recyclerView = findViewById(R.id.sRecyclerView);
    sBnv = findViewById(R.id.sBnv);

    searchAdapter = new SearchAdapter(arrayList, getApplicationContext());
    recyclerView.setHasFixedSize(true);
    llm = new LinearLayoutManager(getApplicationContext());

    final DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("users");

    ref.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            if (dataSnapshot.exists()) {
                for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
                    String username = (String)
                            snapshot.child("username").getValue();
                    arrayList.add(username);

                }
                recyclerView.setLayoutManager(llm);
                recyclerView.setAdapter(searchAdapter);
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
        Toast.makeText(SearchActivity.this, "Database error", Toast.LENGTH_SHORT)
                .show();
        }
    });
public class SearchAdapter extends RecyclerView.Adapter<SearchAdapter.ViewHolder> {

ArrayList<String> friendsSearchedList = new ArrayList<>();
Context mContext;

public SearchAdapter(ArrayList<String> friendsSearchedList, Context mContext){
    this.friendsSearchedList = friendsSearchedList;
    this.mContext = mContext;
}

@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.search_user_item,parent, false);
ViewHolder holder = new ViewHolder(view);
return holder;
}

@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
    final String username = friendsSearchedList.get(position);
    holder.text.setText(username);

}

@Override
public int getItemCount() {
return friendsSearchedList == null ? 0:friendsSearchedList.size();
}

public class ViewHolder extends RecyclerView.ViewHolder {
TextView text, text1, text2;
Button button;
RelativeLayout relativeLayout;
public ViewHolder(View itemView){
super(itemView);

text = itemView.findViewById(R.id.sText);
button = itemView.findViewById(R.id.addFriend);
text1 = itemView.findViewById(R.id.sText1);
text2 = itemView.findViewById(R.id.sText2);
relativeLayout = itemView.findViewById(R.id.relativeLayout);
    }
}
public class User {
public String  email, id, password;
public String username;

public User(String email, String username, String password){
this.email = email;
this.username = username;
this.password = password;
}
public User(){}
public void setUsername(String username){
this.username = username;
}
public String getUsername(){
return username;
}
public void setEmail(String email){
this.email = email;
}
public String getEmail(){
return email;
}
public String getPassword(){
return password;
}
public void setPassword(String password){
this.password = password;
}

}

共有1个答案

强德厚
2023-03-14

最初,您为recyclerview设置的arraylist为空。将数据添加到该列表时,必须通知回收器视图适配器。所以您的代码应该是这样的:

searchAdapter = new SearchAdapter(arrayList, getApplicationContext());
  // remove this line
    /* recyclerView.setHasFixedSize(true);*/
    llm = new LinearLayoutManager(getApplicationContext());
    recyclerView.setLayoutManager(llm);
                recyclerView.setAdapter(searchAdapter);

    final DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("users");

    ref.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            if (dataSnapshot.exists()) {
                for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
                    String username = (String)
                            snapshot.child("username").getValue();
                    arrayList.add(username);

                }
                  ***searchAdapter.notifyDataSetChanged();***

            }
        }
 类似资料:
  • 问题内容: 作为标题,如何从Firebase获取数据并在android studio中显示?当前,由于我不知道如何使用微调器,因此我将id首先放在XML文件中作为EditText。有人知道如何从Firebase获取数据并修改Java文件吗?例如,我想显示微调器中所有(1111,2222,3333 ....)的所有registerEventName(Google)。我在下面添加了附件。感谢您的推进,

  • 问题内容: 在最近的几天里,我试图从SQL表中获取数据并将其放入文本框。 表名称:“检查”。 我正在使用的代码: 结果我什么也没得到。有人知道为什么吗?也许我没有正确调用SQL? 问题答案: 一些评论: 不要使用,仅指定您需要的字段 使用-更少的代码,保证处理 我假设这是一个测试程序,否则在循环中将其重置为无意义

  • 我试过这个: 首先,我获得了数据库中所有数据的引用,我正在尝试获取它,但我不知道如何实现这一点。 此外,当我这样做时,它会抛出以下错误: java.lang.NullPoInterException:尝试在.laramira.atellez.moroninfo.models.newsviewholder$1$1.ondatachange(newsviewholder.java:48)在com.go

  • 问题内容: 每个人,我都试图制作一个音乐应用程序,为此,我在自己的作品中创建了一个Horizo​​ntal ,而我的Horizo​​ntal 正在获取带有艺术家姓名的图像。 但是单击后,我加载了另一个活动。在我的其他活动,我试图在从火力加载SongsData 用。 但是问题是我没有从Firebase获取数据,而是返回了空数据。我在下面提供了我的代码,这是我的Firebase数据库的屏幕截图:-Sc

  • 我是编程新手,我开始使用Ionic框架构建应用程序作为体验。我目前正在学习构建一个基本的社交媒体应用程序,匿名用户可以在该平台上发帖。 我现在处于用户可以评论帖子的阶段。但是,我很难在视图上显示每个帖子的实时评论数。 我计算评论的方法是从Firebase获取帖子数据,计算评论数量,然后显示给视图。 我尝试过使用间隔来每隔x秒获取post数据,以刷新post数据。这有点可行,但问题是离子内容(视图)

  • 我想要一个recyclerview,当第一个应用程序打开时,然后在创建时从服务器获取一些数据,当向上滚动时,会显示recyclerview下方的进度条,当向上滚动到服务器时再次点击URL,并在先前获取的数据下方获取更多数据。但我知道当我第二次点击URL时,它会刷新页面,并在第二次点击时只显示从服务器获取的数据,但我想要第一次和第二次点击的响应。 对不起,我说英语 以下是我的主要活动代码: }