相关疑难解决方法(0)

Android使用视图模型和实时数据实施搜索

我正在为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)

search android observable android-livedata

5
推荐指数
3
解决办法
2976
查看次数

标签 统计

android ×1

android-livedata ×1

observable ×1

search ×1