我以某种方式设法通过搜索(以<开头> @Alex Mamo )(以...开头)开发了一个过滤后的列表视图,但是当我打算搜索包含的字符串时遇到了另一个问题。我将遵循一些 答案 ,但是出现错误,提示不兼容的类型。 需要: com.google.firebase.database.Query 发现: 。
Query q = foodref.addListenerForSingleValueEvent(eventListener);
这是我到目前为止的admin_search.java
代码。
searchButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final String searchfood = inputSearch.getText().toString();
DatabaseReference rootref = FirebaseDatabase.getInstance().getReference();
DatabaseReference foodref = rootref.child("food");
ValueEventListener eventListener = new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
Boolean found;
for(DataSnapshot ds : dataSnapshot.getChildren()){
String fooditemname = ds.child("fooditemname").getValue(String.class);
found = fooditemname.contains(searchfood);
Log.d("TAG" , fooditemname + " / " + found);
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
};
Query q = foodref.addListenerForSingleValueEvent(eventListener);
//Above Line I got Error : Incompatible types.Required:com.google.firebase.database.Query Found:void
//Query query = FirebaseDatabase.getInstance().getReference().child("food").orderByChild("fooditemname").startAt(searchfood).endAt(searchfood+"\uf8ff");
FirebaseListOptions<food> options = new FirebaseListOptions.Builder<food>()
.setLayout(R.layout.list_items).setLifecycleOwner(admin_search.this)
.setQuery(q,food.class).build();
adapter = new FirebaseListAdapter(options)
{
@Override
protected void populateView(View v, Object model, int position) {
TextView itemname, itemprice, avail;
itemname = v.findViewById(R.id.itemname);
itemprice = v.findViewById(R.id.itemprice);
avail = v.findViewById(R.id.avail);
food itemFood = (food) model;
itemname.setText(itemFood.getFooditemname().toString());
itemprice.setText(itemFood.getFooditemprice().toString());
avail.setText(itemFood.getAvailability().toString());
}
};
lv.setAdapter(adapter);
如果我坚持使用query
,那么我可以搜索以单词开头的美食名,但对于q
却出错。
谢谢。