美文网首页
parameter must be a descendant o

parameter must be a descendant o

作者: 南顾夏浅 | 来源:发表于2018-09-10 11:58 被阅读0次

我遇到一个非必现的bug

1. 一个LoginFragment和一个HomeFragment(包含四个Fragment),MainActivity,一个包含退出登录的 MineSettingFragment

2. 用Realm存储用户信息

3. 用Rx观察用户信息的变化实现 登录和退出

查找这个bug说是 焦点的问题,比如EditTextView等等, 但是我发现HomeFragment ,MineSettingFragment没有一个主动获取焦点的view。

MainActivity

disposable = realm().where(Account.class).findAllAsync().asFlowable()
                .filter(RealmResults::isLoaded)
                .doOnNext(new Consumer<RealmResults<Account>>() {
                    @Override
                    public void accept(RealmResults<Account> accounts) throws Exception {
                        if (accounts.size() > 0) {
                            EventBus.getDefault().post(Account.current());
                        }
                    }
                })
                .map(new Function<RealmResults<Account>, Boolean>() {
                    @Override
                    public Boolean apply(RealmResults<Account> accounts) throws Exception {
                        return accounts.size() > 0;
                    }
                })
                .distinctUntilChanged()
                .skip(1)
                .subscribe(new Consumer<Boolean>() {
                    @Override
                    public void accept(Boolean aBoolean) throws Exception {
                        if (aBoolean) { //登录
                            popTo(LoginFragment.class, false, () -> {
                                startWithPop(HomeFragment.newInstance());
                            });
                        } else { // 退出
                            popTo(HomeFragment.class, false, () -> {
                                startWithPop(LoginFragment.newInstance());
                            });
                        }
                    }
                }, new Consumer<Throwable>() {
                    @Override
                    public void accept(Throwable throwable) throws Exception {
                        throwable.printStackTrace();
                    }
                });

退出 ,删除数据库信息

                                pop();
                                Realm realm = Realm.getDefaultInstance();
                                realm.beginTransaction();
                                realm.deleteAll();
                                realm.commitTransaction();
                                realm.close();
                   

这样原因可能是,MineSettingFragment 还没有 pop()时就进行了数据库操作,导致了这个问题。pop之后用 post,在fragment操作之后再进行数据库操作。

                        pop();
                        post(new Runnable() {
                            @Override
                            public void run() {
                                Realm realm = Realm.getDefaultInstance();
                                realm.beginTransaction();
                                realm.deleteAll();
                                realm.commitTransaction();
                                realm.close();
                            }
                        });

相关文章

网友评论

      本文标题:parameter must be a descendant o

      本文链接:https://www.haomeiwen.com/subject/mbfsgftx.html