У меня есть простой список ReViewlerView CardViews, который работает нормально.Я пытаюсь отфильтровать список, когда пользователь выбирает определенный «тип» CardView.Приложение падает с ошибкой Logcat, говоря, что ArrayList "FilterList0" является нулевым объектом.Однако из полного представления списка RecyclerView и данных базы данных я знаю, что существует ряд типов карт CardView, которые должны отображаться в отфильтрованном представлении.Я подозреваю, что AsyncTask () в репозитории не возвращает отфильтрованный список.Что мне здесь не хватает?
public class MainActivity extends AppCompatActivity
private List<Card> filteredModelList0 = null;
public void onClickFilterList(View view) {
final AlertDialog.Builder alertDialogFilter = new AlertDialog.Builder(MainActivity.this);
...
dialogFilter.show();
TextView allDos = dialogLayoutFilter.findViewById(id.AllDos);
allDos.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
filteredModelList0 = mViewModel.filterListCardTypeDo();
adapter.setFilter(filteredModelList0);
dialogFilter.dismiss();
}
MainViewModel.java
...
List<Card> filterListCardTypeDo() {
return repository.filterDo();
}
QuickcardRepository
...
public List<Card> filterDo() {
new FilterDoAsyncTask(quickcardDao).execute();
return null; *** is this the problem?
}
private static class FilterDoAsyncTask extends AsyncTask<Void, Void, List<Card>> {
private QuickcardDao asyncTaskDao2;
FilterDoAsyncTask(QuickcardDao dao) {
asyncTaskDao2 = dao;
}
@Override
protected List<Card> doInBackground(Void... voids) {
return asyncTaskDao2.filterListCardTypeDo();
}
CardDao
...
@Query("SELECT * FROM cards WHERE cardType IN ('Do')")
List<Card> filterListCardTypeDo();
Adapter
...
public void setFilter(List<Card> listItems) {
cardList = new ArrayList<>();
cardList.addAll(listItems);
notifyDataSetChanged();
}