Почему не работает поиск по БД (SearchView и room database)?
Не могу понять в чем ошибка. Делаю учебное приложение "Менеджер паролей". Создал несколько записей в БД. В MainActivity с помощью виджета SearchView получаю строку для поиска и передаю строку в метод, который должен осуществлять поиск. Но мне выдаются все записи из БД.
MainActivity.java
mySearchView = findViewById(R.id.mySearchView);
mySearchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String searchWords) {
Log.i("testing_search", searchWords);
Toast.makeText(MainScreenActivity.this, "You searching:" + "\"" + searchWords + "\"",Toast.LENGTH_LONG).show();
SearchPasswordInBackGround(searchWords);
return false;
}
@Override
public boolean onQueryTextChange(String searchWords) {
return false;
}
});
//Метод для поиска в MainActivity
private void SearchPasswordInBackGround(String searchString){
ExecutorService executor = Executors.newSingleThreadExecutor();
Handler handler = new Handler(Looper.getMainLooper());
executor.execute(new Runnable() {
@Override
public void run() {
// Background Work
passwordArrayList.addAll(passwordsAppDatabase.getPasswordDAO().getSearchedPasswords(searchString));
Log.i("testing_array", passwordArrayList.toString());
// Executed after the background work had finished
handler.post(new Runnable() {
@Override
public void run() {
passwordsAdapter.notifyDataSetChanged();
}
});
}
});
}
Adapter.java
package ru.wizand.passwordmanager.adapter;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import java.util.ArrayList;
import ru.wizand.passwordmanager.MainScreenActivity;
import ru.wizand.passwordmanager.R;
import ru.wizand.passwordmanager.db.entity.Password;
public class PasswordsAdapter extends RecyclerView.Adapter<PasswordsAdapter.MyViewHolder> {
// 1 - Variables
private Context context;
private ArrayList<Password> passwordArrayList;
private ArrayList<Password> passwordArrayListSearch;
private MainScreenActivity mainMainScreenActivity;
private String searchString;
// 2 - ViewHolder
public class MyViewHolder extends RecyclerView.ViewHolder {
public TextView name;
public TextView url;
public TextView login;
public TextView password;
public TextView additional;
public MyViewHolder(@NonNull View itemView) {
super(itemView);
this.name = itemView.findViewById(R.id.name);
this.url = itemView.findViewById(R.id.url);
this.login = itemView.findViewById(R.id.login);
this.password = itemView.findViewById(R.id.password);
this.additional = itemView.findViewById(R.id.additional);
}
}
public PasswordsAdapter(Context context, ArrayList<Password> passwords, MainScreenActivity mainMainScreenActivity) {
this.context = context;
this.passwordArrayList = passwords;
this.mainMainScreenActivity = mainMainScreenActivity;
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext()).
inflate(R.layout.password_list_item,parent,false);
return new MyViewHolder(itemView);
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
final Password password = passwordArrayList.get(position);
holder.name.setText(password.getName());
holder.url.setText(password.getUrl());
// holder.login.setText(password.getLogin());
holder.login.setText(password.getLogin());
holder.password.setText(password.getPassword());
holder.additional.setText(password.getAdditional());
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mainMainScreenActivity.addAndEditPasswords(true, password, position);
}
});
}
@Override
public int getItemCount() {
return passwordArrayList.size();
}
}
PasswordDAO.java
@Query("select * from passwords where password_name ==:search")
public List<Password> getSearchedPasswords(String search);
В чем может быть ошибка?
Вывод в консоль. И, судя по консоли, просто выводятся все записи из БД:
2024-09-03 10:33:22.501 11864-11864 testing_search
ru.wizand.passwordmanager I erut 2024-09-03 10:33:22.506 11864-11928 testing_array
ru.wizand.passwordmanager I [ru.wizand.passwordmanager.db.entity.Password@9fe9ae2, ru.wizand.passwordmanager.db.entity.Password@164fe73, ru.wizand.passwordmanager.db.entity.Password@d799130, ru.wizand.passwordmanager.db.entity.Password@21fa1a9, ru.wizand.passwordmanager.db.entity.Password@c6f832e] 2024-09-03 10:33:27.993 11864-11864 testing_search
ru.wizand.passwordmanager I eryt 2024-09-03 10:33:28.001 11864-11929 testing_array
ru.wizand.passwordmanager I [ru.wizand.passwordmanager.db.entity.Password@9fe9ae2, ru.wizand.passwordmanager.db.entity.Password@164fe73, ru.wizand.passwordmanager.db.entity.Password@d799130, ru.wizand.passwordmanager.db.entity.Password@21fa1a9, ru.wizand.passwordmanager.db.entity.Password@c6f832e, ru.wizand.passwordmanager.db.entity.Password@5152450]