Я выполняю некоторые запросы к базе данных Firebase с помощью Firebase Adapter и Recyclerview. Если у меня есть результаты в базе данных с текстом редактирования, я просматриваю их с помощью утилита просмотра. Это моя проблема. Я хочу отобразить тост на экране, если запрос, который я вызываю с помощью Edittext, не включен в базу данных. Я написал несколько кодов, но я не могу запустить его полностью. Ответы на другие вопросы в Stackoverflow у меня не сработали, и я не смог понять проблему. Пожалуйста, просмотрите мой код ниже. Я был бы признателен, если бы вы могли помочь. Извините за мой плохой английский.
MainActivity
public class MainActivity extends AppCompatActivity {
DatabaseReference mUserDatabase;
EditText Search_Edit_Text;
ImageButton Search_Button;
RecyclerView Search_Contact_List;
FirebaseRecyclerOptions<User> options;
FirebaseRecyclerAdapter<User,CategoryViewHolder> adapter;
Query firebaseSearchQuery;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mUserDatabase = FirebaseDatabase.getInstance().getReference().child("Database");
Search_Edit_Text = (EditText) findViewById(R.id.Search_Edit_Text);
Search_Button = (ImageButton) findViewById(R.id.Search_Button);
Search_Contact_List = (RecyclerView) findViewById(R.id.Search_Contact_List);
Search_Contact_List.setHasFixedSize(true);
GridLayoutManager gridLayoutManager = new GridLayoutManager(getBaseContext(),1);
Search_Contact_List.setLayoutManager(gridLayoutManager);
Search_Button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String searchText = Search_Edit_Text.getText().toString().trim();
firebaseUserSearch(searchText);
}
});
}
private void firebaseUserSearch(String searchText) {
firebaseSearchQuery = mUserDatabase.orderByChild("phone").startAt("" + searchText).endAt("" + searchText + "\uf8ff");
options = new FirebaseRecyclerOptions.Builder<User>()
.setQuery(firebaseSearchQuery,User.class)
.build();
adapter = new FirebaseRecyclerAdapter<User, CategoryViewHolder>(options) {
@Override
protected void onBindViewHolder(@NonNull final CategoryViewHolder holder, int position, @NonNull final User model) {
holder.categoryname.setText(model.getName());
}
@NonNull
@Override
public CategoryViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.list_layout,parent,false);
return new CategoryViewHolder(itemView);
}
};
setCategory();
}
private void setCategory() {
adapter.startListening();
Search_Contact_List.setAdapter(adapter);
adapter.registerAdapterDataObserver(new RecyclerView.AdapterDataObserver() {
@Override
public void onChanged() {
super.onChanged();
checkEmpty();
}
@Override
public void onItemRangeInserted(int positionStart, int itemCount) {
super.onItemRangeInserted(positionStart, itemCount);
checkEmpty();
}
@Override
public void onItemRangeRemoved(int positionStart, int itemCount) {
super.onItemRangeRemoved(positionStart, itemCount);
checkEmpty();
}
void checkEmpty() {
if (adapter.getItemCount() == 0){
Toast.makeText(MainActivity.this, "No Result", Toast.LENGTH_SHORT).show(); //This code does not work.
} else {
Toast.makeText(MainActivity.this, "OKEY", Toast.LENGTH_SHORT).show(); //This code works.
}
}
});
}
}
Я написал, что часть кода выше работает. Но код не работает, когда я не получаю никаких результатов. В некоторых ответах Stackoverflow говорится, что мне нужно получить значение с помощью adapter.getCount () или adapter.getItemCount (), но я пробовал это сделать, но это не сработало.
CategoryViewHolder.class
public class CategoryViewHolder extends RecyclerView.ViewHolder {
public TextView categoryname;
public CategoryViewHolder(View itemView) {
super(itemView);
categoryname = (TextView)itemView.findViewById(R.id.Search_Result_Name);
}
}
User.class
public class User {
public String name;
public String phone;
public User() {
}
public User(String name, String phone) {
this.name = name;
this.phone = phone;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
}