当我在Firebase数据库中搜索项目时,我没有收到错误,但根本没有任何价值。通过调试器时,实际上已设置了editText中的值,并且在Query中搜索这些值时,它们没有显示:
final EditText t = (EditText) findViewById(R.id.DjNameET);
mProfileDatabase = FirebaseDatabase.getInstance().getReference();
t.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView textView, int i, KeyEvent keyEvent) {
if(i == EditorInfo.IME_ACTION_SEARCH)
{
searchData = t.getText().toString();
return true;
}
return false;
}
});
ImageButton imgB= (ImageButton) findViewById(R.id.searchBtn);
imgB.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view)
{
query = mProfileDatabase.child("djprofile").orderByChild("djName")
.startAt(searchData)
.endAt(searchData + "\uf8ff");
FirebaseRecyclerOptions<DjProfile> firebaseRecyclerOptions = new FirebaseRecyclerOptions.Builder<DjProfile>()
.setQuery(query, DjProfile.class)
.build();
firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<DjProfile, ResultsViewHolder>(firebaseRecyclerOptions)
{
@NonNull
@Override
public ResultsViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.searchitem_list, viewGroup, false);
return new ResultsViewHolder(view);
}
@Override
protected void onBindViewHolder(@NonNull ResultsViewHolder holder, int position, @NonNull DjProfile model) {
holder.setDjProfile(model);
}
};
firebaseRecyclerAdapter.startListening();
recyclerView.setAdapter(firebaseRecyclerAdapter);
}
});
实时数据库的外观如下:
在我的编辑文本中,当我搜索“ DjRockSauce”时,recyclerview中未显示任何结果,这是因为我没有正确地进入查询路径,如果是这种情况,我如何正确获取搜索和显示结果的文件路径?
答案 0 :(得分:2)
遇到此类问题时,正确的方法是尝试找出问题所在,和不是问题所在。
第一步可能是查看是否可以显示未过滤的配置文件。
query = mProfileDatabase.child("djprofile");
如果显示所有配置文件,则说明您构建的路径正确。
如果是这种情况,我会尝试使用硬编码的搜索字符串:
query = mProfileDatabase.child("djprofile").orderByChild("djName")
.startAt("Dr")
.endAt("Dr\uf8ff");
如果这也可行,那么问题在于您如何获得搜索词,您应该对此进行调查。
答案 1 :(得分:0)
在@Frank van Puffelen的帮助下弄清楚,我的问题是我正在调用searchText,并且它返回null。实际上,我实际上需要按如下所示将物理EditText名称的文本传递到搜索查询中:
query = mProfileDatabase.child("djprofile").orderByChild("djName")
.startAt(t.getText().toString()).endAt(t.getText().toString() + "\uf8ff");