我正在为udacity课程在android中进行一个项目,我目前正在尝试实现搜索功能,同时坚持使用android体系结构组件并使用firestore和room。错误。
因此,我建立了一个数据库存储库,以使我的Firestore和Room数据库保持同步并传递数据。然后,我使用viewmodel和观察者模式(我认为),以便观察者获取数据并查找更改后将其提供给我的适配器(refreshMyList(List)),该适配器填充recyclerview如下所示:
contactViewModel = ViewModelProviders.of(this).get(ContactsViewModel.class);
contactViewModel.getAllContacts().observe(this, new
Observer<List<DatabaseContacts>>() {
@Override
public void onChanged(@Nullable List<DatabaseContacts>
databaseContacts) {
ArrayList<DatabaseContacts> tempList = new ArrayList<>();
tempList.addAll(databaseContacts);
contactsAdapter.refreshMyList(tempList);
if (tempList.size() < 1) {
results.setVisibility(View.VISIBLE);
} else {
results.setVisibility(View.GONE);
}
}
});
Run Code Online (Sandbox Code Playgroud)
我现在想执行数据搜索,我的房间查询都设置好,并且我的数据存储库中有一些方法可以根据搜索字符串获取联系人,但是我似乎无法刷新列表,我已经读过了有什么方法可以像Transformations.switchMap一样?但我似乎无法全神贯注于它的工作原理,谁能帮助我
当前,我正在尝试从异步任务返回结果列表,它曾经返回实时数据,但我getValue()还是一如既往地对其进行了更改null,不确定是否正确,这里是异步:
private static class searchContactByName extends AsyncTask<String, Void,
ArrayList<DatabaseContacts>> {
private LiveDatabaseContactsDao mDao;
searchContactByName(LiveDatabaseContactsDao dao){
this.mDao = dao;
}
@Override
protected ArrayList<DatabaseContacts> doInBackground(String... params) {
ArrayList<DatabaseContacts> contactsArrayList = new ArrayList<>();
mDao.findByName("%" + params[0] + "%"); …Run Code Online (Sandbox Code Playgroud)