小编Bri*_*gun的帖子

从 LiveData 触发第二个查询并合并结果(Firestore)?

我有两个集合:用户和书籍。无论用户或书籍是否更新,我都需要获取它们的结果,然后将结果合并到 LinkedHashMap 中以用作 listView 菜单。

我认为 MediatorLiveData 将是可行的方法,但是如果我将用户查询和书籍查询放入,那么我会从两个 LiveData 对象之一中获取空值,因为只有一个或另一个触发。我想也许如果其中一个触发,那么也许我在 MediatorLiveData 的每个 addSource() 中运行了一个查询,但我不确定这是否可行。

我的关于 MediatorLiveData 的帖子在这里: 使用 MediatorLiveData 合并到 LiveData (Firestore) QuerySnapshot 流正在产生奇怪的结果

我的两个查询和 LiveData 对象如下:

//getUsers query using FirebaseQueryLiveData class
private Query getUsersQuery() {
    FirebaseAuth mAuth = FirebaseAuth.getInstance();

    adminID = mAuth.getUid();
    query = FirebaseFirestore.getInstance().collection("admins")
            .document(adminID)
            .collection("users")
    return query;
}

private FirebaseQueryLiveData usersLiveData = new FirebaseQueryLiveData(getUsersQuery());


//getBooks query using FirebaseQueryLiveData class
private Query getBooksQuery () {
    FirebaseGroupID firebaseGroupID = new FirebaseGroupID(getApplication());
    groupID = firebaseGroupID.getGroupID();
    query = FirebaseFirestore.getInstance().collection("books")
            .whereEqualTo("groupID", groupID) …
Run Code Online (Sandbox Code Playgroud)

android firebase android-livedata android-architecture-components google-cloud-firestore

4
推荐指数
1
解决办法
2016
查看次数

Transformations.map 和 MediatorLiveData 使用空对象引用崩溃的应用程序

不知道发生了什么。我正在运行两个查询,然后使用 MediatorLiveData 和 Transformations.map 合并和转换这些查询。我将这个几乎完全相同的代码用于其他两个查询,没有问题。但是当我将它用于这些特定查询时,应用程序一开始就会崩溃,并出现以下错误。

请注意:我已经尝试观察 MediatorLiveData,并且可以毫无错误地获得两个查询的结果。只有当我尝试通过 Transformations.map 运行它们时,才会出现错误和应用程序崩溃。

这是我用来测试运行良好的 MediatorLiveData 的观察:

    viewModel.getAllValidEventsLiveDataMerger().observe(this, new Observer<AllValidEventsSnapshot>() {
            @Override
            public void onChanged(@Nullable AllValidEventsSnapshot allValidEventsSnapshot) {
                if (allValidEventsSnapshot.isComplete()) {
                    List<Event> nonRepeatEventList;
                    List<Event> repeatEventList;
                    List<Event> eventList = new ArrayList<>();
                    nonRepeatEventList = allValidEventsSnapshot.getValidNonRepeatableEventsSnapshot().toObjects(Event.class);
                    repeatEventList = allValidEventsSnapshot.getValidRepeatableEventsSnapshot().toObjects(Event.class);
                    eventList.addAll(nonRepeatEventList);
                    eventList.addAll(repeatEventList);
                    Log.d(TAG, "EVENTLIST: " + eventList.toString());
                }
            }
        }); 
Run Code Online (Sandbox Code Playgroud)

这是通过 Transformations.map 的观察:

    viewModel.getAllValidEventsLiveData().observe(this, new Observer<List<Event>>() {
            @Override
            public void onChanged(@Nullable List<Event> eventList) {
                if (eventList != null) {
                    Log.d(TAG, "EventList: " + eventList.toString());
                }
            }
        }); 
Run Code Online (Sandbox Code Playgroud)

这是代码:

视图模型.java …

android android-architecture-components google-cloud-firestore

2
推荐指数
1
解决办法
2067
查看次数