Java 正在尝试对RecyclerView和firebase使用搜索查询。运行应用程序时,recyclerview元素中不会显示任何内容
搜索功能的代码。我有一个带有onclicklistener的按钮,它运行此函数并将edittext搜索输入作为参数传递。我之所以怀疑这个错误在这里,是因为我在youtube上找不到FirebaseRecyclerAdapter正确格式的共识。我想我从一个视频到另一个视频看到了FirebaseUI的不同版本。我试图查看firebasedatabase函数的当前文档,但仍然无法使其正常工作 当我按search时,我的应用程序将运行,但回收视图从未显示为已填充/填充。我想知道是不是我从数据库中读取的数据不正确,还是我在定义适配器时出错了Java 正在尝试对RecyclerView和firebase使用搜索查询。运行应用程序时,recyclerview元素中不会显示任何内容,java,android,firebase,firebase-realtime-database,android-recyclerview,Java,Android,Firebase,Firebase Realtime Database,Android Recyclerview,搜索功能的代码。我有一个带有onclicklistener的按钮,它运行此函数并将edittext搜索输入作为参数传递。我之所以怀疑这个错误在这里,是因为我在youtube上找不到FirebaseRecyclerAdapter正确格式的共识。我想我从一个视频到另一个视频看到了FirebaseUI的不同版本。我试图查看firebasedatabase函数的当前文档,但仍然无法使其正常工作 当我按search时,我的应用程序将运行,但回收视图从未显示为已填充/填充。我想知道是不是我从数据库中读取的数
public void firebaseUserSearch(String search) {
ref = FirebaseDatabase.getInstance().getReference();
Query firebaseSearchQuery = ref.orderByChild("name").startAt(search).endAt(search + "\uf8ff");
FirebaseRecyclerOptions<UserProfile> options = new FirebaseRecyclerOptions.Builder<UserProfile>().setQuery(firebaseSearchQuery, UserProfile.class).build();
FirebaseRecyclerAdapter firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<UserProfile, UsersViewHolder>(options) {
@Override
protected void onBindViewHolder(@NonNull UsersViewHolder holder, int position, @NonNull UserProfile model) {
holder.setDetails(model.getName(), model.getAge(), model.getEmail());
}
@NonNull
@Override
public UsersViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_layout, parent, false);
return new UsersViewHolder(view);
}
};
rvMenteeList.setAdapter(firebaseRecyclerAdapter);
}
我的模型类的代码
public class UserProfile {
public String name;
public String email;
public String age;
public UserProfile() {
}
public void setName(String name) {
this.name = name;
}
public void setEmail(String email) {
this.email = email;
}
public void setAge(String age) {
this.age = age;
}
public String getName() {
return name;
}
public String getEmail() {
return email;
}
public String getAge() {
return age;
}
public UserProfile(String Name, String Email, String Age) {
this.name = Name;
this.email = Email;
this.age = Age;
}
}
我的数据库按此层次结构排序
thebloomapp-5426a
DcehovJ6tRaHBdsau8IfjDcJfslny1
age: "15"
email: "trentjohnson505@gmail.com"
name: "kyle"
我解决了我的问题,我忘了在设置适配器的正上方添加这行代码。
firebaseRecyclerAdapter.startListening()代码>
如果没有这一行,适配器将永远不会侦听数据库中的数据。我的搜索功能中的新更改如下所示
public void firebaseUserSearch(String search) {
ref = firebaseDatabase.getReference();
Query firebaseSearchQuery = ref.orderByChild("name").startAt(search).endAt(search + "\uf8ff");
FirebaseRecyclerOptions<UserProfile> options = new FirebaseRecyclerOptions.Builder<UserProfile>().setQuery(firebaseSearchQuery, UserProfile.class).build();
FirebaseRecyclerAdapter firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<UserProfile, UsersViewHolder>(options) {
@Override
protected void onBindViewHolder(@NonNull UsersViewHolder holder, int position, @NonNull UserProfile model) {
holder.setDetails(model.getName(), model.getAge(), model.getEmail());
}
@NonNull
@Override
public UsersViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_layout, parent, false);
return new UsersViewHolder(view);
}
};
firebaseRecyclerAdapter.startListening();
rvMenteeList.setAdapter(firebaseRecyclerAdapter);
}
public void firebaseUserSearch(字符串搜索){
ref=firebaseDatabase.getReference();
查询firebaseSearchQuery=ref.orderByChild(“名称”).startAt(搜索).endAt(搜索+“\uf8ff”);
FirebaseRecyclerOptions选项=新建FirebaseRecyclerOptions.Builder().setQuery(firebaseSearchQuery,UserProfile.class).build();
FirebaseRecyclerAdapter FirebaseRecyclerAdapter=新的FirebaseRecyclerAdapter(选项){
@凌驾
受保护的无效onBindViewHolder(@NonNull UsersViewHolder holder,int position,@NonNull UserProfile model){
holder.setDetails(model.getName()、model.getAge()、model.getEmail());
}
@非空
@凌驾
public UsersViewHolder onCreateViewHolder(@NonNull ViewGroup父级,int viewType){
View=LayoutFlater.from(parent.getContext()).flate(R.layout.list\u布局,parent,false);
返回新的UsersViewHolder(视图);
}
};
firebaseRecyclerAdapter.startListening();
rvMenteeList.setAdapter(firebaseRecyclerAdapter);
}
您是否尝试将类中的字段设置为私有?堆栈溢出是一种效率极低的交互式调试器,因此最好在调试器中运行代码,并确定到底发生了什么(而不是只关注未发生的最终结果)。例如:如果您在onCreateViewHolder
的第一行上放置一个断点,并在调试器中运行,那么它是否遇到过该断点?与onBindViewHolder相同
?如果是,那么模型
是否包含来自数据库的用户数据?@Frankvanpoffelen我通过调试器运行了我的应用程序,FirebaseRecyclerAdapter中的所有内容,包括onBindViewHolder和onCreateViewHolder都被跳过,永远不会运行。至少它似乎从未在调试器中运行过。我甚至在onbind和oncreate方法中创建了日志,但它从未打印出这些日志。
public void firebaseUserSearch(String search) {
ref = firebaseDatabase.getReference();
Query firebaseSearchQuery = ref.orderByChild("name").startAt(search).endAt(search + "\uf8ff");
FirebaseRecyclerOptions<UserProfile> options = new FirebaseRecyclerOptions.Builder<UserProfile>().setQuery(firebaseSearchQuery, UserProfile.class).build();
FirebaseRecyclerAdapter firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<UserProfile, UsersViewHolder>(options) {
@Override
protected void onBindViewHolder(@NonNull UsersViewHolder holder, int position, @NonNull UserProfile model) {
holder.setDetails(model.getName(), model.getAge(), model.getEmail());
}
@NonNull
@Override
public UsersViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_layout, parent, false);
return new UsersViewHolder(view);
}
};
firebaseRecyclerAdapter.startListening();
rvMenteeList.setAdapter(firebaseRecyclerAdapter);
}